14

Fooなどのクラスの場合:

struct Foo { static const int i = 9; };

GCC4.5は以下を拒否することがわかりました

Foo f;
int x = decltype(f)::i;

次のような中間のtypedefを使用すると機能します。

typedef decltype(f) ftype;
int x = ftype::i;

しかし、私は名前空間をきれいに保つことを好みます。優先順位が問題になるかもしれないと思ったので、かっこも試してみましたが、運が悪かったです。提示されているようにそれは不可能ですか、それとも私を助けることができる構文の一部がありますか?

4

1 に答える 1

13

と言うのは有効なC++0xですdecltype(f)::i。GCCはまだそれをサポートしていません。IDテンプレートで回避できます

template<typename T> struct identity { typedef T type; };
int x = identity<decltype(f)>::type::i;

identityboost::mpl名前空間の一部です。

于 2011-04-02T20:21:09.937 に答える