#include #include #include #include class Lifetime { public: Lifetime() { std::cout << "Lifetime() // default ctor\n"; } ~Lifetime() { std::cout << "~Lifetime() // destructor\n"; } Lifetime(int x) : member(x) { std::cout << "Lifetime(int) // ctor\n"; } Lifetime(Lifetime const&) { std::cout << "Lifetime(Lifetime const&) // copy ctor\n"; } Lifetime(Lifetime&&) { std::cout << "Lifetime(Lifetime &&) // move ctor\n"; } auto operator=(Lifetime&&) -> Lifetime& { std::cout << "operator = (Lifetime &&) // move assign\n"; return *this; } auto operator=(Lifetime const&) -> Lifetime& { std::cout << "operator = (Lifetime const&) // copy assign\n"; return *this; } private: int member; }; auto main() noexcept -> int { auto const l_arr = std::array{Lifetime(4), Lifetime(2)}; return 0; }