In the following example, why doesn't the move constructor get called in the construction of 'copy' inside fun, even though the 'src' argument of 'fun' is explicitly a rvalue reference and is only used in that construction?
struct Toy {
    int data;
    Toy(): data(0)
    {
        log("Constructed");
    }
    Toy(Toy const& src): data(src.data)
    {
        log("Copy-constructed");
    }
    Toy(Toy&& src): data(src.data)
    {
        log("Move-constructed");
    }
};
Toy fun(Toy&& src)
{
    Toy copy(src);
    copy.data = 777;
    return copy;
}
Toy toy(fun(Toy())); // LOG: Constructed Copy-constructed
 
    