虽然C++标准不允许使用字符串文字作为模板参数,它允许这样的事情:字符串作为模板参数
ISO/IEC 14882:2011
14.3 0.2模板非类型参数[temp.arg.nontype]
2 [注:字符串文字(2.14.5)不满足要求的任何这些类别的 并且因此不是可接受 模板 - 论据。 [示例:
template<class T, const char* p> class X {/.../};
X<int, "Studebaker"> x1; // error: string literal as template-argument
const char p[] = "Vivisectionist";
X<int,p> x2; // OK
末端示例]末端注]
那么,为什么下面的代码给我一个错误在所有编译器(gcc 4.7.2,MSVC-11.0,Comeau)?
template <const char* str>
void foo() {}
int main()
{
const char str[] = "str";
foo<str>();
}
+1它使用类似MSCV 6或7。但是我最后一次尝试它不再编译:-(高兴你问这个问题的工作。 –