"enum class"成员是否在使用时立即或稍后实例化?

Joh*_*itb 12 c++ c++11

考虑一下这个

template<typename T>
struct A {
  enum class X {
    V = T()
  };
};
Run Code Online (Sandbox Code Playgroud)

对于成员类和成员函数,C++ 11(和C++ 03)将不会实例化它们的定义,除非我们以需要它们定义的方式使用它们.这是真的enum class吗?

// valid?
A<std::string> a;
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法检查编译器,因为C++ 11刚刚出门,一切都不可靠,似乎.

Ala*_*kes 10

我认同.14.7.1/1

类模板特化的隐式实例化导致[...]作用域成员枚举的声明的隐式实例化,而不是定义或默认参数的隐式实例化