不同命名空间中的模板特化静态成员

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),则从其封闭的命名空间集中声明任何命名空间.

这是编译器错误还是我误解了?

Col*_*mbo 7

这是一个编译器错误,仍然存在于HEAD中.请报告.Clang提供了更清晰的诊断:

错误:无法在此处定义或重新声明'bar',因为命名空间'O'不包含命名空间'Foo'

const int Baz::bar = 1;
          ~~~~~^
Run Code Online (Sandbox Code Playgroud)