以下代碼在Visual Studio 2013下編譯,並且無法在gcc/clang(所有測試版本)下編譯。從屬模板使用Visual Studio編譯,但與clang/gcc失敗
鐺:error: use 'template' keyword to treat 'write' as a dependent template name
GCC:error: expected primary-expression before ‘int’
會出現這兩種錯誤在代碼
template <typename Itr>
struct A {
template <typename Other>
void write(Other x) {}
};
template <class T>
struct B {
A<T>& a;
B(A<T>& a) : a(a) {
// error: use 'template' keyword to treat 'write' as a dependent template name
a.write<int>(5);
}
};
int main() {
A<int> a;
// Fine
a.write<int>(5);
B<int> b(a);
}
經驗告訴我,Visual Studio是可能是錯誤的指示,但我不知道爲什麼當完全指定A<T>
時,這應該無法編譯,我只想調用一個我指定類型的模板方法。
我看到這被標記爲重複的,是的,它在技術上是..但是當然你可以理解一個人如何設法做出這個錯誤,當你需要了解標準的非常技術性的措辭,使這種連接。同樣從這個問題的例子來看,現在還不清楚這是相關的。我個人認爲這是一個有用的問題,但無論如何。 – user3870920
被標記爲重複的問題不是對問題的負面反映。這個問題非常好。只是它之前已經被問過了,關聯的問題對問題和解決方案有一個非常全面的解釋。複製品永遠活着可以用作路標。已關閉的問題被刪除。 – Barry
@巴里啊,對!很高興知道,謝謝 – user3870920