Dlaczego ten konstruktor kopiowania jest wywoływany, a nie konstruktor ruchu?

Poniższy fragment kodu powoduje wywołanie konstruktora kopiowania, w którym oczekiwałem wywołania konstruktora ruchu:

<code>#include <cstdio>

struct Foo
{
    Foo() { puts("Foo gets built!"); }
    Foo(const Foo& foo) { puts("Foo gets copied!"); }
    Foo(Foo&& foo) { puts("Foo gets moved!"); }
};

struct Bar { Foo foo; };
Bar Meow() { Bar bar; return bar; }
int main() { Bar bar(Meow()); }
</code>

W wersji VS11 Beta, w trybie debugowania, drukuje:

<code>Foo gets built!
Foo gets copied!
Foo gets copied!
</code>

Sprawdziłem standard iBar wydaje się, że spełnia wszystkie wymagania, aby automatycznie wygenerować domyślny konstruktor ruchu, ale wydaje się, że tak się nie dzieje, chyba że istnieje inny powód, dla którego nie można przenieść obiektu. Widziałem wiele pytań związanych z przenoszeniem i kopiowaniem, ale nie sądzę, aby ktokolwiek miał ten konkretny problem.

Jakieś wskazówki na temat tego, co się tutaj dzieje? Czy to standardowe zachowanie?

questionAnswers(1)

yourAnswerToTheQuestion