Когда инициализатором является {}
, конструктор по умолчанию имеет приоритет над конструктором std::initializer_list
, но последний будет использоваться, когда первого нет.Поэтому, чтобы вызвать ошибку компиляции, вам необходимо явно удалить конструктор по умолчанию, чтобы конструктор по умолчанию все еще был выбран, но не мог использоваться:
struct A {
A() = delete;
A(std::initializer_list<uint32_t>) { /* ... */ }
};
Однако во время компиляции вы можете 't запретить пользователю вручную создавать пустой объект std::initializer_list
и передавать его внутрь. Вам нужно будет сгенерировать исключение, чтобы сигнализировать о сбое конструкции в этом случае.