雖然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。但是我最後一次嘗試它不再編譯:-(高興你問這個問題的工作。 –