【发布时间】:2016-08-12 00:55:17
【问题描述】:
enum class enabler{};
template<typename T>
class X {
template<typename std::enable_if<std::is_class<T>::value,enabler>::type = enabler()>
void func();
void func(int a);
void func(std::string b);
};
我有这个类,这 3 个重载用于 func。我需要第二个/第三个版本可用于类/非类类型,而第一个版本仅可用于类类型。当我尝试像上面那样使用enable_if 时,非类类型的类实例化会产生编译错误。
【问题讨论】:
-
SFINAE 仅适用于 deduced 类型。
-
您能详细说明一下吗?
-
您实际上并不需要使用 sfinae。在您的情况下,
static_assert就足够了。请参阅我的(迟到的)答案中的最小示例。 -
@skypjack 是的,如果这不是一个简化的例子。在非简化版本中,它可能会影响其他函数的重载解析。
标签: c++ templates c++11 sfinae enable-if