2011-10-16 3 views
12

はこの1"enum class"メンバはすぐに使用されるか、後でインスタンス化されますか?

template<typename T> 
struct A { 
    enum class X { 
    V = T() 
    }; 
}; 
メンバクラスやメンバ関数の場合

、C++ 11(およびC++ 03)、我々は彼らの定義が必要な方法でそれらを使用しない限り、その定義をインスタンス化しません考えてみましょう。これはenum classで当てはまりますか? C++ 11がちょうどドアの外にある、すべてがまだ信頼性がないので

// valid? 
A<std::string> a; 

残念ながら、私は、コンパイラを確認することができない、それはそうです。

+0

'A a;'は 'std :: string'を暗黙的に' int'に変換できない限り有効です。しかしもう一度... – Florian

答えて

10

だと思います。 14.7.1/1

クラステンプレートの特殊化の暗黙のインスタンス生成がなく、定義やデフォルト引数の、宣言の暗黙の インスタンス化の原因となる、の[...]スコープのメンバー列挙

+1

ありがとう! http://llvm.org/bugs/show_bug.cgi?id=10044およびhttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=49224として報告されています。 –

関連する問題