【发布时间】:2020-02-18 12:40:40
【问题描述】:
class Base {};
template <class T, typename = typename std::enable_if<std::is_base_of<Base, T>::value>::type>
class B {}; ^^^^^^^^^^ error C2139: 'A': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_base_of'
class A : public Base
{
B<A> b;
};
显然这是不允许的。是否有解决方法,或者我忘记了什么?
【问题讨论】:
-
我可以立即想出解决实际问题的方法,但无论哪种方式,您都希望将默认参数值更改为
typename std::enable_if<...>::type。 -
我为什么要这样做?
-
@T.J.Evers
std::enable_if本身永远不会退出 SFINAE,它的type成员会被动态禁用。 -
另外,我原来的评论中有错字:“我可以……”应该是“我不能……”:)。
-
当前解决方法:我们
B<A, void> b;绕过检测。不漂亮,但至少它在其他地方仍然很活跃。
标签: c++ c++11 templates inheritance