#include <iostream>
class Foo { };
Foo createFoo() { return Foo(); }
void bar(Foo &&) { std::cout << "in bar(Foo &&)\n"; }
void bar(Foo const &) { std::cout << "in bar(Foo const &)\n"; }
void baz(Foo &&f) {
std::cout << "in baz, ";
bar(f);
// bar(std::move(f));
}
int main()
{
baz(createFoo());
return 0;
}
私の予想される出力は:in baz, in bar(Foo &&)
ですが、取得しています: in baz, in bar(Foo const &)
。呼び出しをbar
(コメントを参照)に切り替えると、期待される出力が得られますが、これは間違っているようです。aを a にbar(Foo &&)
変換しないとコンパイラが呼び出せない理由はありますか?Foo&&
Foo&&
前もって感謝します!