gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:11:54 24 4
gpt4 key购买 nike

命名空间中有一个模板类

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:

An explicit specialization shall be declared in a namespace enclosing the specialized template. An explicit specialization whose declarator-id is not qualified shall be declared in the nearest enclosing namespace of the template, or, if the namespace is inline (7.3.1), any namespace from its enclosing namespace set.

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

最佳答案

这是一个编译器错误,still present in HEAD .请举报。 Clang 提供了更清晰的诊断:

error: cannot define or redeclare 'bar' here because namespace 'O' does not enclose namespace 'Foo'

const int Baz::bar = 1;
~~~~~^

关于c++ - 不同命名空间中的模板特化静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com