Рассмотрим приведенный ниже код:
#include <array>
struct T
{
T() = delete;
};
int main()
{
std::array<T, 0> a;
a.size();
}
Мы по умолчанию инициализируем массив размером 0. Поскольку нет элементов, конструктор T
не должен быть вызван.
Однако Clang по-прежнему требует конструкцию T
, а GCC принимает указанный выше код.
Обратите внимание, что если мы изменим инициализацию массива на:
std::array<T, 0> a{};
Clang принимает его на этот раз.
Предоставляет ли конструктор T
, не поддерживаемый по умолчанию, предотвращать конструкцию std::array<T, 0>
по умолчанию?