或者,是否有一个带有复制构造函数的类型的示例可以抛出,但是仍然是微不足道的?如果没有,这是否意味着is_nothrow_copy_constructible_v<T>只要is_trivially_copy_constructible_v<T>真的应该是真的?
请注意,根据标准(最新草案 [23.15.4.3]),对于不可复制的类型T,我们需要表达式T t(declval<const T&>());是一个格式良好的变量定义,已知不会抛出任何异常.这个措辞对我来说似乎有点茫然 - 对于要知道什么意味着什么?说明者是否应noexcept足以建立知识?或者决定是留给实施的?
编辑:我意识到,通过简单的可复制和简单的可复制构造之间存在差异.我的重点是后者.
琐碎的可复制是否意味着不可复制?
不.例如:
struct X {
X(X&& ) = default;
X(X const& ) = delete;
};
Run Code Online (Sandbox Code Playgroud)
这种类型可以轻易复制,但不能无法复制......甚至可以复制.
然而,鉴于一个类型是可复制† 和平凡可复制,那么它必须是没有抛出可复制(任何可能的例外是必须来自非平凡的拷贝,它可以不存在).
†简单地默认复制构造函数但标记它将其noexcept(false)定义为已删除,因此这种类型不可复制.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |