Construtor padrão declarado pelo usuário + inicializadores na classe! = Construtor fornecido pelo usuário? [duplicado]
Esta questão já tem uma resposta aqui:
Por que o C ++ requer um construtor padrão fornecido pelo usuário para construir um objeto const padrão? 5 respostasoDocumentação do Clang explica perfeitamente que
Se uma classe ou struct não possui um construtor padrão definido pelo usuário, o C ++ não permite que você construa uma instância padrão da instância como esta ([dcl.init], p9)
A lógica é que, se um objeto const não for inicializado corretamente, ele não poderá ser alterado posteriormente. O código a seguir tem apenas um usuáriodeclarado construtor padrão paraTest
, mas todos os seus membros têm inicializadores em classe,
#include<iostream>
class Test
{
public:
Test() = default;
void print() const { std::cout << i << "\n"; }
private:
int i = 42; // will propagate to the default constructor!
};
int main()
{
Test const t; // <-- Clang chokes on the const keyword, g++ does not
t.print(); // prints 42
}
então a razão para tambémfornecendo o construtor padrão parece supérfluo para mim. E, de fato, o g ++ 4.8.1 compila sem problemas (Exemplo Online), ApesarClang <= 3,2 não.
Questões: por que a combinação de iniciadores completos da classe + construtor padrão declarado pelo usuário não é suficiente para construir um objeto const padrão? Existe uma correção em andamento para o C ++ 14 Standard?
ATUALIZAR: alguém pode tentar no Clang 3.3 / 3.4 para ver se isso foi corrigido comparado ao Clang 3.2?