【发布时间】:2019-12-04 14:19:20
【问题描述】:
代码如下:
#include <utility>
#include <type_traits>
template <class T>
class ClassWithDisabledFoo
{
public:
template <class U = T, std::enable_if_t<std::is_integral<U>::value, int> = 0>
void foo(){}
};
class ClassWithFoo
{
public:
void foo(){}
};
class Derived: public ClassWithFoo, public ClassWithDisabledFoo<double>
{
};
void test()
{
Derived d;
d.foo();
}
在调用 d.foo() 时,clang 和 gcc 都表示对 foo 的调用是不明确的,尽管 ClassWithDisabledFoo::foo 被 enable_if 禁用。如果我将foo 定义从ClassWithFoo 移动到Derived,代码就会编译。
为什么这不起作用,我怎样才能使它起作用?
【问题讨论】: