尽管C++标准不允许使用字符串字面值作为模板参数,但是这样的内容是被允许的:
《ISO/IEC 14882:2011》中提到:
14.3.2 模板非类型参数 [temp.arg.nontype]
2 [注:字符串字面值(2.14.5)不满足任何这些类别的要求,因此不是可接受的模板参数。[示例:
template class X { / ... / }; X x1; // 错误:将字符串字面值作为模板参数 const char p[] = "Vivisectionist"; X x2; // 正确
--end example]--end note]
那么为什么下面的代码在所有编译器中都会给我一个错误呢?(gcc 4.7.2,MSVC-11.0,Comeau)
《ISO/IEC 14882:2011》中提到:
14.3.2 模板非类型参数 [temp.arg.nontype]
2 [注:字符串字面值(2.14.5)不满足任何这些类别的要求,因此不是可接受的模板参数。[示例:
template class X { / ... / }; X x1; // 错误:将字符串字面值作为模板参数 const char p[] = "Vivisectionist"; X x2; // 正确
--end example]--end note]
那么为什么下面的代码在所有编译器中都会给我一个错误呢?(gcc 4.7.2,MSVC-11.0,Comeau)
template <const char* str>
void foo() {}
int main()
{
const char str[] = "str";
foo<str>();
}