【发布时间】:2015-08-04 17:15:59
【问题描述】:
命名空间中有一个模板类
namespace N
{
template <typename T>
class Foo {
static const T bar;
};
}
以及不同命名空间中的特化:
namespace O
{
typedef N::Foo<int> Baz;
template<>
const int Baz::bar = 1;
}
此代码使用 gcc (4.9.2) 编译但无法使用 msvc (v120) 编译:
error C2888: 'const int N::Foo<int>::bar' : symbol cannot be defined within namespace 'O'
如果我理解正确,代码不符合 C++11:
应在包含 专门的模板。一个显式特化,其声明符 id 不合格应在最近的封闭命名空间中声明 模板的名称,或者,如果命名空间是内联的 (7.3.1),则任何命名空间 来自其封闭的命名空间集。
这是编译器错误还是我误解了?
【问题讨论】:
标签: c++ templates c++11 visual-c++ gcc