struct MyStruct
{
MyStruct() {}
};
struct MySndStruct
{
MySndStruct() {}
};
template <typename T>
T Func(const T& t = T())
{
T ret;
return ret;
}
template <>
MyStruct Func<MyStruct>(const MyStruct& ms)
{
MyStruct ret;
return ret;
}
int main()
{
Func<MySndStruct>();
Func<MySndStruct>(); // Works
Func<MyStruct>();
Func<MyStruct>(); // Fails
Func<MyStruct>(MyStruct()); // Works fine
return 0;
}
的MYSTRUCT專業化爲Func鍵的第二次調用失敗,並在Visual C以下錯誤++ 2010爲什麼在第二次調用時使用默認參數時,此模板特化失敗?
error C2440: 'default argument' : cannot convert from 'MyStruct *' to 'MyStruct &
如果我通過由值而不是通過引用(MyStruct Func<MyStruct>(MyStruct ms)
)的誤差變
fatal error C1001: An internal error has occurred in the compiler.
這是Microsoft的C++編譯器中的錯誤還是默認參數不支持模板特化?
如果任何人都可以向我解釋這裏發生了什麼,例如,爲什麼編譯器假設一個指針傳入時顯然不是IMO?爲什麼第一次調用工作?我認爲它與實例化模板有關,但我想更準確地知道。
編輯:更新的參數爲const突出,這不就VISUAL C++的差異2010年
第一個錯誤'(T&t = T())'。標準不能將臨時綁定到引用。代碼編譯罰款後gcc修復此問題後:http://liveworkspace.org/code/1b8fecded33ebc25a6eb8519c6a083ea – ForEveR
感謝ForEverR。您建議的修補程序不適用於Visual C++ 2010.這是否意味着它是編譯器中的錯誤? – hanDerPeder
不要在MSVC 2010中爲我工作,但在MSVC 2012 RC中運行良好。 – ForEveR