В С++ 17 пустые типы тегов в стандартной библиотеке теперь имеют конструкторы по умолчанию, которые помечены explicit
, а также = default
. Например, std::piecewise_construct_t
теперь определяется как
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
Мой вопрос просто, в чем причина этого изменения с С++ 14? Что означает явно установленный по умолчанию явный конструктор по умолчанию (!) Для пустого класса?
(Чтобы не быть помеченным как обман: этот вопрос с 2010 года спрашивает о целях явных конструкторов по умолчанию, но это был pre-С++ 11 и давным-давно, так что вещи, скорее всего, изменились. Этот вопрос является более поздним, но ответ, похоже, предполагает, что агрегатная инициализация будет выполняться независимо от наличия конструктора по умолчанию, поэтому мне любопытно, почему это изменение в последнем стандарте.)