2009-06-17 97 views
6

在研究一個問題的答案(基於this answer)我試圖做到以下幾點:爲什麼我不能成爲模板參數?

template <class T> 
class friendly { 
    friend class T; 
}; 

friendly<string> howdy; 

這失敗,出現以下錯誤編譯:

error: template parameter "T" may not be used in an elaborated type specifier friend class T;

從我可以理解我的好朋友谷歌這是這樣,我不會不小心嘗試實例friendly<int>但爲什麼編譯模板時這是一個錯誤?當使用無效類型實例化模板時(例如我寫的int f() { return T::foo(); }

+5

如何交朋友和影響參數。 – TheTXI 2009-06-17 13:46:53

+1

這是一個相關的問題:http://stackoverflow.com/questions/392120/why-cant-i-declare-a-friend-through-a-typedef – 2009-06-17 14:19:32

回答

2

多一點googleling長大擴展friend聲明(PDF)C++0x

此文件包含以下內容:

template <typename T> class R { 
    friend T; 
}; 
R<C> rc; // class C is a friend of R<C> 
R<int> ri; // OK: 「friend int;」 is ignored 

肚裏居然還比我的想法(忽略非法friend減速,而不是實例化過程中不及格)。所以我想答案是沒有一個很好的理由,它正在被糾正。

3

該標準的第7.1.5.3節將其明確地描述爲一個格式錯誤的詳細類型說明符的示例。

關於這個問題的討論可以找到here

相關問題