uais alterações no C ++ fizeram a inicialização de cópias funcionar para a classe com construtor explícit
Considere este código:
struct X{
explicit X(){}
explicit X(const X&){}
};
void foo(X a = X()){}
int main(){}
sando o padrão C ++ 14, GCC 7.1 e clang 4.0 rejeita o código, o que eu esperava.
No entanto, usando C ++ 17 -std=c++1z
), ambos aceitam o código. Que regra mudou?
Para que os dois compiladores exibam esse mesmo comportamento, duvido que seja um bug. Mas, até onde eu sei, o último rascunho ainda diz que o argumento padrão usa a semântica de cópia-inicialização 1. Mais uma vez, sabemos queexplicit
construtores só permitirão inicialização direta 2.