$14.3.2 - “...非类型、非模板模板参数的模板参数应为以下之一:
...指定具有静态存储持续时间的对象的地址的常量表达式 (5.19)外部或内部链接或具有外部或内部链接的功能......”
在下面显示的代码中,我无法理解为什么不允许“name2”和“name3”作为非类型模板参数。我在 Windows 上使用 gcc 4.7.2。
'name2' 和 'name3' 都是数组的名称,因此是常量表达式。此外,“name2”具有内部链接,“name3”同时具有静态链接和内部链接。
template<char const *p> void f()
{
}
char name1[] = "Hi";
static char name2[]= "Hi";
const static char name3[]= "Hi";
char *name4 = "Hi";
int main()
{
f<name1>();
f<name2>();
f<name3>();
f<name4>();
}
正如 @Nawaz 正确猜测的那样,这是一个实现错误,而不是标准的深奥角落。
具体来说,gcc 似乎遇到了麻烦。排除最后一个name4
这是违反标准的,其余部分可以很好地编译clang http://liveworkspace.org/code/JDZqy%2450
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)