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

时间:2011-10-16 21:02:07

标签: c++ c++11

考虑这一个

template<typename T>
struct A {
  enum class X {
    V = T()
  };
};

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

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

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

1 个答案:

答案 0 :(得分:10)

我是这么认为的。 14.7.1 / 1

  

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