Home > database >  Which operation is not trivial here?
Which operation is not trivial here?

Time:08-14

Compilers agree, that the below X and Y are default-constructible, but not trivially (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>);

Why are they not trivial? According to cppreference.com (see is_trivially_constructible) a non-trivial operation must have been called during default-construction. Which one is that?

CodePudding user response:

https://en.cppreference.com/w/cpp/language/default_constructor#Trivial_default_constructor says:

The default constructor for class T is trivial (i.e. performs no action) if all of the following is true:

  • ...
  • T has no non-static members with default initializers. (since C 11)
  • ...
  • Related