Constructor predeterminado explícito

Este código se compila bien con GCC 5.X, MSVC, pero GCC 6.X da error:

"la conversión a 'a' de la lista de inicializadores usaría el constructor explícito 'a :: a ()'"clang"el constructor elegido es explícito en la inicialización de copia".

Quitandoexplicit o cambiando aa c{} soluciona el problema, pero tengo curiosidad por saber por qué funciona de esta manera.

class a
{
public:
    explicit a () {}
};
struct b
{
    a c;
};

int main() {
    b d{};
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta