Expliziter Verschiebungskonstruktor

Versucht, den folgenden Code zu kompilieren:

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

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

Den folgenden Fehler erhalten:

Aufruf des implizit gelöschten Kopierkonstruktors von 'Foo'

Nun, es ist ziemlich offensichtlich, dass der Kopierer implizit gelöscht wird.

Frage 1: Warum braucht der Compiler den Kopierer vonFoo? Ich habe den Rückgabewert von erwartetbar aus dem Wert konstruiert werdenFoo() mit move-ctor.

Dann erkläre ich den move-ctor als implizit und alles wird erfolgreich kompiliert.

Frage 2: Warum braucht der Compiler keinen copy-ctor mehr, wenn ich den move-ctor als implizit deklariere?

Frage 3: Was machtexplicit Schlüsselwort bedeutet im Kontext des Kopierens und Verschiebens von ctors, da es definitiv etwas anderes als der Kontext von regulären ctors bedeutet.