bool
我尝试使用(不像流行的void_
技巧)来实现 SFINAE :
template<typename T, bool = true>
struct Resolve
{
static const bool value = false;
};
template<typename T>
struct Resolve<T, T::my_value>
{
static const bool value = true;
};
目标是专门化其中static const bool my_value = true;
定义的类。如果它们已定义false
或未定义,则不要专门化它。IE
struct B1 { // specialize Resolve for this case
static const bool my_value = true;
};
struct B2 { // don't specialize
static const bool my_value = false;
};
struct B3 {}; // don't specialize
应用上述技巧时B1
会出现编译错误:
Resolve<B1>::value;
错误:模板参数“T::my_value”涉及模板参数
我知道这可以通过其他方式来实现。但是,我有兴趣知道,为什么它会在这里给出编译器错误,并且可以在这段代码本身中解决它吗?