https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105683
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- It is calling the copy constructor (which you missed in your comment): value(const value& other) noexcept : v{other.v} { } Which is called via: inline value_variant_type::value_variant_type(const std::vector<ossia::value>& v) : m_type{Type8} { new (&m_impl.m_value8) std::vector<ossia::value>(v); } inline ossia::value init_value(ossia::val_type type) { ... return std::vector<ossia::value>{}; } I am thinking there is a constructor that is not being elided here.