相关疑难解决方法(0)

被删除的构造函数是否"可访问"?

关于删除的移动构造函数的这个问题的删除答案引用cppreference.com说,is_move_constructible只要移动构造函数是"可访问的",该特征就应该成功,即使它不是"可用的".

事实上,标准要求参数类型的移动构造是格式良好的,因此答案并不完全正确.

现在,该标准反复使用与构造函数相关的术语"可访问",指的是实际的可构造性.例如:

[C++11 8.5/6]:默认初始化的类型的对象T是指:

  • 如果T是(可能是cv限定的)类类型(第9节),T则调用默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);
  • 如果T是数组类型,则每个元素都是默认初始化的 ;
  • 否则,不执行初始化.

如果程序要求对const限定类型的对象进行默认初始化T,T则应为具有用户提供的默认构造函数的类类型.

但是,我无法在标准中的任何地方找到明确说明deleted,显式定义的构造函数是否"可访问".

一个不同的[非规范]引用似乎表明deleted-ness和可访问性是正交的:

[C++11: 12.2/1]: [..] [注意:即使没有对析构函数或复制/移动构造函数的调用,也应满足所有语义限制,例如可访问性(第11条)以及函数是否被删除(8.4.3).[..]

  • 我错过了一段吗?
  • 如果没有,是否应更正cppreference.com页面?你能建议更好的措辞吗?
  • 这个标准应该更清楚吗?

c++ language-lawyer c++11

16
推荐指数
2
解决办法
541
查看次数

标签 统计

c++ ×1

c++11 ×1

language-lawyer ×1