如何解决为什么琐碎的复制/移动可构造性取决于琐碎的破坏性?
具有所有默认功能的类的缺省值,除非是非平凡的析构函数,否则不能轻易移动或复制。有关示例,请参见https://godbolt.org/z/o83rPz:
#include <type_traits>
class Sample
{
public:
Sample(Sample const&) = default;
Sample(Sample&&) = default;
Sample& operator=(Sample const&) = default;
Sample& operator=(Sample&&) = default;
~Sample() {}
};
static_assert(std::is_copy_constructible<Sample>::value,"");
static_assert(std::is_move_constructible<Sample>::value,"");
static_assert(std::is_trivially_copy_constructible<Sample>::value,""); // Fails with GCC and Clang
static_assert(std::is_trivially_move_constructible<Sample>::value,""); // Fails with GCC and Clang
static_assert(std::is_copy_assignable<Sample>::value,"");
static_assert(std::is_move_assignable<Sample>::value,"");
static_assert(std::is_trivially_copy_assignable<Sample>::value,"");
static_assert(std::is_trivially_move_assignable<Sample>::value,"");
在ICC通过时,GCC和Clang均未通过相应的断言。奇怪的是,尽管我能理解分配给对象需要销毁,但分配不会受到影响。但这似乎是正确的。为什么?为什么ICC会不同意?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。