Trying to compile the following code:

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

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

```

Getting the following error:

> 
> call to implicitly-deleted copy constructor of 'Foo'
> 
> 
> 

Well, it's quite obvious that the copy-ctor is implicitly deleted.

**Question 1:** Why does the compiler need the copy-ctor of `Foo`? I expected the return value of `bar` to be constructed from the rvalue `Foo()` with move-ctor.

Then I redeclare the move-ctor as implicit and everything compiles successfully.

**Question 2:** Why the compiler does not need copy-ctor any more when I redeclare the move-ctor as implicit?

**Question 3:** What does `explicit` keyword mean in the context of copy and move ctors as it definitely means something different from from the context of regular ctors.