O padrão `std :: array <T, 0>` é construtível por padrão, onde `T` não é construtível por padrão?

Considere o código abaixo:

#include <array>

struct T
{
    T() = delete;
};

int main()
{
    std::array<T, 0> a;
    a.size();
}

Por padrão, inicializamos uma matriz de tamanho 0. Como não há elementos, nenhum construtor deT deve ser chamado.

Contudo,Clang ainda requerT padrão construtível, enquantoGCC aceita o código acima.

Observe que, se alterarmos a inicialização do array para:

std::array<T, 0> a{};

Clang aceita desta vez.

Não construtível por padrãoT evitastd::array<T, 0> de ser construtível por padrão?

questionAnswers(3)

yourAnswerToTheQuestion