考虑以下代码:
template <class T>
bool value = typename T::type::value;
其中type
是T
的成员类型,而value
应该是type
的静态数据成员。
我用clang++-6.0 -std=c++14
进行了编译,它发出了:
a.cc:2:37: error: expected '(' for function-style cast or type construction
bool value = typename T::type::value;
~~~~~~~~~~~~~~~~~~~~~~~^
1 error generated.
该如何纠正?
答案 0 :(得分:5)
修复:
template <class T>
bool constexpr value = T::type::value;
您正在此处访问一个值,因此不需要typename
。
::
中的范围解析运算符T::type::
意味着type
只能是一个类型,在那里没有歧义,因此typename
是不必要的。