Пример:
struct Foo
{
Foo() = default; // #1 default constructor, trivial, not deleted
template <class... Args>
Foo(Args...) = delete; // #2 default constructor, deleted
};
static_assert(std::is_trivial_v<Foo>);
auto test()
{
Foo f{}; // OK
}
имеет один или несколько конструкторов по умолчанию
Оба # 1 и # 2 являются конструкторами по умолчанию (см. [Class.default.ctor] )
все они либо тривиальны, либо удалены
# 1 тривиально, # 2 удалено
и хотя бы одно из который не удаляется
# 1 не удаляется
[class.default.ctor]
Конструктор по умолчанию для класса X - это конструктор класса X, для которого каждый параметр, не являющийся пакетом параметров функции, имеет аргумент по умолчанию (включая случай конструктора без параметров). [...]