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?