2011-10-28 65 views
3

我可以寫類成員變量的decltype是否被禁止?爲什麼?

int a; 
decltype(a) b; 

但我的編譯器(微軟的Visual Studio 2010,cl版16.00.40219.01)禁止我

class A 
{ 
    int a; 
    decltype(a) b;// error C2327: 'A::a' : is not a type name, static, or enumerator 
}; 

而且科莫C/C++ 4.3.10.1(2008年10月6日11: 28:09)ONLINE_EVALUATION_BETA2給出了類似的錯誤。

"ComeauTest.c", line 7: error: a nonstatic member reference must be relative to a 
      specific object 
    decltype(a) b; 
      ^

這種行爲的基本原理是什麼?

+3

適用於gcc 4.7,所以也許它是一個錯誤。 – evnu

+0

@evnu感謝您的測試。我應該檢查一下這個標準是爲了說這是一個錯誤。 –

+0

@evnu g ++(Debian 4.6.1-15)4.6.1編譯它。 –

回答

3

是的,這是有效的。在未評估的操作數(操作數爲decltype,sizeof,noexcept,...)中,您可以爲非靜態數據成員指定成員函數以外的名稱。

你試過的那些編譯器還不支持這個功能。

+0

I.e.你的編譯器只實現C++ 11的一部分(用於命名未評估操作數的寬鬆規則和'decltype'都是新的)。 – MSalters

+1

@Johannes Schaub - litb 你好,你有沒有參考標準? (章節號碼等) –

相關問題