关于删除的移动构造函数的这个问题的删除答案引用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).[..]