C ++ 14中[class.copy] / 12下面的大胆文本的目的是什么?

时间:2016-10-19 12:14:23

标签: c++ c++14 language-lawyer

C ++ 14中的

[class.copy] / 12:

如果不是用户提供的,则类X的复制/移动构造函数是微不足道的,其参数类型列表是等效的 到隐式声明的参数类型列表,如果

  • (12.1) - 类X没有虚函数(10.3)且没有虚基 类(10.1)和
  • (12.2) - 类X没有非静态数据成员 volatile限定类型和
  • (12.3) - 选择复制/移动每个直接基数的构造函数 class subobject很简单,
  • (12.4) - 对于类的X的每个非静态数据成员 type(或其数组),选择复制/移动的构造函数 该成员是微不足道的;

否则复制/移动构造函数不重要。

我可以看到上面的句子在N4606中已被删除,但我无法在C++ Standard Core Language Active Issues, Revision 96中找到任何可以证明从C ++ 14中删除它的理由。

1 个答案:

答案 0 :(得分:6)

这是CWG 2171的结果。删除的文本仅在一种情况下更改含义:

struct X {
    X(X& ) = default; // not user-provided
                      // parameter-type-list differs from implicit declaration's X const&
                      // wasn't trivial before, is trivial now
};

但是这个拷贝构造函数是否微不足道是一个单独的问题,它是否实际上是可调用的,因此原始文本被认为与标准的通常意图不一致,因此被删除。