2011-04-28 33 views
4

這編譯出VS 2009中的問題嗎?我是愚蠢的嗎? GCC發出警告,該模板是私人的....? 我錯過了什麼?爲什麼這個私人模板函數編譯? - >編譯器問題VS 2009

#include <iostream> 

using namespace std; 

class A 
{ 
private: 
    template<typename T> 
    A& operator<<(const T & v) 
    { 
     cout << v << endl; 
     return *this; 
    } 
}; 

int main() 
{ 
    A a; 
    a << 4; 
    system("pause"); 
} 

回答

1

該代碼不應該編譯 - 這是VS中的一個錯誤(或者愚蠢的擴展)。海合會也應該拒絕。操作員在使用範圍內無法訪問。

科莫正確對待這樣:

"ComeauTest.c", line 28: error: function "A::operator<<(const T &) [with T=int]" 
      (declared at line 14) is inaccessible 
    a << 4; 

編輯:一個相關標準片斷,從13.3/1

[注:通過 重載解析選擇的功能不能保證 是適當爲上下文。 其他限制,如 功能的可訪問性,可以使用 在調用上下文 不合格。 ]