sim*_*mon 3 c++ gcc templates visual-c++ c++11
命名空间中有一个模板类
namespace N
{
template <typename T>
class Foo {
static const T bar;
};
}
Run Code Online (Sandbox Code Playgroud)
并在不同的命名空间中进行专门化:
namespace O
{
typedef N::Foo<int> Baz;
template<>
const int Baz::bar = 1;
}
Run Code Online (Sandbox Code Playgroud)
此代码使用gcc(4.9.2)编译,但无法使用msvc(v120)进行编译:
error C2888: 'const int N::Foo<int>::bar' : symbol cannot be defined within namespace 'O'
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,代码不符合C++ 11:
应在包含专用模板的命名空间中声明显式特化.其声明者id未限定的显式特化应在模板的最近的封闭命名空间中声明,或者,如果命名空间是内联(7.3.1),则从其封闭的命名空间集中声明任何命名空间.
这是编译器错误还是我误解了?
这是一个编译器错误,仍然存在于HEAD中.请报告.Clang提供了更清晰的诊断:
错误:无法在此处定义或重新声明'bar',因为命名空间'O'不包含命名空间'Foo'
Run Code Online (Sandbox Code Playgroud)const int Baz::bar = 1; ~~~~~^
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |