【发布时间】:2012-12-28 09:53:00
【问题描述】:
以下代码片段在 g++ 和 clang++ 下运行良好:
// bsp1.cc
class A {
public:
A(int, char const *);
int value;
const char * name;
};
class B {
public:
static const A many_as[];
};
A const B::many_as[]
{ { 0, "zero" },
{ 1, "one" },
{ 2, "two" },
{ 3, "three" },
{ 77, 0 } };
当我将 B 类更改为模板时:
// bsp2.cc
class A {
public:
A(int, char const *);
int value;
const char * name;
};
template<typename T>
class B {
public:
static const A many_as[];
};
template<>
A const B< int >::many_as[]
{ { 0, "zero" },
{ 1, "one" },
{ 2, "two" },
{ 3, "three" },
{ 77, 0 } };
clang++ 失败:
tmp/bsp2.cc:19:1: error: expected ';' after top level declarator
{ { 0, "zero" },
^
1 error generated.
g++ 对此仍然很满意。
版本信息: g++ (Debian 4.7.2-4) 4.7.2, clang 3.3 版(主干 171722)
当我将= 添加为时
A const B< int >::many_as[] =
clang++ 也很开心。
我的问题:
- bsp2.cc 有效吗? (换句话说:这是clang++的问题吗?)
- bsp2 有和没有
=之间在语义上有什么区别吗? (即我可以使用带有=的版本作为“解决方法”吗?) - (额外问题:)您能否指出 C++ 11 标准中描述这一点的段落?
【问题讨论】:
标签: c++ templates static c++11 clang