编译器同意,下面的X和Y是默认可构造的,但不是平凡的(demo)。
#include <type_traits>
struct X { int x {}; };
struct Y { int y = 0; };
static_assert(std::is_default_constructible_v<X>);
static_assert(std::is_default_constructible_v<Y>);
static_assert(!std::is_trivially_default_constructible_v<X>);
static_assert(!std::is_trivially_default_constructible_v<Y>);
Run Code Online (Sandbox Code Playgroud)
为什么它们不是微不足道的?根据 cppreference.com(请参阅 参考资料is_trivially_constructible),在默认构造期间必须调用一个不平凡的操作。那是哪一个?