【发布时间】:2019-06-06 09:03:29
【问题描述】:
以下摘录在 Clang-libstdc++ 或 Clang-libc++、GCC、它们的许多版本以及自 11(14 和 17)以来的所有三个版本的语言中编译:
#include <type_traits>
struct HasUserDefinedDestructor {
~HasUserDefinedDestructor() {}
};
using HUDD = HasUserDefinedDestructor;
static_assert(not std::is_trivially_move_constructible<HUDD>::value, "");
static_assert(not std::is_trivially_copy_constructible<HUDD>::value, "");
这让我很吃惊,因为副本只需要一些琐碎的操作。
这是编译器/库中的错误,还是标准在某处说拥有用户定义的析构函数会使复制和移动构造函数变得不简单?
编辑:为什么这不是默认构造问题的重复: 鉴于 cmets,我们知道构造函数的“无异常”和琐碎性受到析构函数的无异常性和琐碎性的影响,但在知道所有这些特征都相关之前,问题是不同的。有这个问题可以让任何人看到这是相关的
【问题讨论】:
-
如果你使用
= default作为你的析构函数,你会得到不同的结果。 -
"有这个问题可以让任何人看到这是相关的" 如果它是重复的,这个问题仍然会在这里。它只会指向另一个问题,表明它们是相关的。
标签: c++ language-lawyer template-meta-programming typetraits