有:
struct Value
{
template<class T>
static constexpr T value{0};
};
(0) ideone
template<typename TValue>
struct Something
{
void x()
{
static_assert(TValue::template value<int> == 0, "");
}
};
int main() { Something<Value>{}.x(); return 0; }
不使用 clang++ 3.6 编译。
错误:不能在没有模板参数列表的情况下引用变量模板“值”
不使用 g++ 5.2 编译。
错误:'template constexpr const T Value::value' 不是函数模板
(1) ideone
使用 clang++ 和 g++ 编译。
struct Something
{
void x()
{
static_assert(Value::template value<int> == 0, "");
}
};
int main() { Something{}.x(); return 0; }
为什么(0)无法编译?
如果通过模板参数(在本例中为 )访问变量模板,似乎会出现问题TValue
。为关键字定义类型别名TValue
或使用typename
关键字并不能解决问题。
这里发生了什么?