【发布时间】:2011-12-08 06:04:53
【问题描述】:
我尝试使用 bool 实现 SFINAE(不像流行的 void_ trick):
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 或未定义,则不要对其进行专门化。即
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”涉及模板参数
我知道这可以通过其他方式实现。但是,我很想知道,为什么它会在这里给出编译器错误,并且可以在这段代码本身中解决它吗?
【问题讨论】:
标签: c++ templates compiler-errors sfinae