2011-10-28 4 views
3

私はクラスメンバー変数の宣言型は禁止されていますか?どうして?

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を禁止します: ONLINE_EVALUATION_BETA2の場合は28:09)同様のエラーが発生します。

"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,sizeofnoexcept、...)内では、非静的データメンバーをメンバー関数外でも指定できます。

あなたが試したコンパイラは、まだこの機能をサポートしていません。

+0

I.あなたのコンパイラはC++ 11の一部だけを実装しています(評価されていないオペランドを命名するための緩和されたルールと 'decltype'は両方とも新しいものです)。 – MSalters

+1

@Johannes Schaub - litb こんにちは、標準への参照はありますか? (章番号等) –

関連する問題