Construtor de movimento explícito

Tentando compilar o seguinte código:

struct Foo
{
    explicit Foo ( void ) { }
    explicit Foo ( Foo&& rhs ) { }
};

Foo bar ( void )
{
    return Foo();
}

Obtendo o seguinte erro:

chamada para o construtor de cópias excluído implicitamente de 'Foo'

Bem, é óbvio que o copiador é excluído implicitamente.

Questão 1: Por que o compilador precisa do copiador deFoo? Eu esperava o valor de retorno debar a ser construído a partir do valorFoo() com o movedor.

Em seguida, redeclaro o movitor como implícito e tudo é compilado com êxito.

Questão 2: Por que o compilador não precisa mais do copiador quando redeclaro o movedor como implícito?

Questão 3: O queexplicit palavra-chave significa no contexto de copiar e mover médicos, pois definitivamente significa algo diferente do contexto dos médicos regulares.

questionAnswers(3)

yourAnswerToTheQuestion