C++ 在类模板中定义变量模板
考虑这个最小的例子:C++ 在类模板中定义变量模板,c++,gcc,clang,c++14,C++,Gcc,Clang,C++14,考虑这个最小的例子: template<class X> struct foo; template<> struct foo<int> { template<class = void> static constexpr int x = 0; }; template<class T> constexpr int foo<int>::x<T>; 模板结构foo; 模板 结构foo { 模板 静态
template<class X> struct foo;
template<>
struct foo<int>
{
template<class = void>
static constexpr int x = 0;
};
template<class T>
constexpr int foo<int>::x<T>;
模板结构foo;
模板
结构foo
{
模板
静态constexpr int x=0;
};
模板
constexpr int foo::x;
最后两行是必需的,因为否则当使用变量x
时,我们将得到一个未定义的引用
虽然gcc(6.2.1)很乐意编译这段代码,但clang(3.9.0)在最后一行失败了,它传递了一条神秘的消息:
错误:变量模板部分专门化未专门化
任何模板参数;要定义主模板,请删除
模板参数列表
哪一行是正确的行为?最后两行代码应该是:
template<class T>
const int foo<int>::x;
模板
常量int foo::x;
或
模板
constexpr int foo::x;
喜欢最后两行代码应该是:
template<class T>
const int foo<int>::x;
模板
常量int foo::x;
或
模板
constexpr int foo::x;
喜欢@Holt@Holt