//******************************************************** // The following code example is taken from the book // C++ Move Semantics - The Complete Guide // by Nicolai M. Josuttis (www.josuttis.com) // http://www.cppmove.com // // The code is licensed under a // Creative Commons Attribution 4.0 International License // http://creativecommons.org/licenses/by/4.0/ //******************************************************** #include class C { public: void foo() const& { std::cout << "foo() const&\n"; } void foo() && { std::cout << "foo() &&\n"; } void foo() & { std::cout << "foo() &\n"; } void foo() const&& { std::cout << "foo() const&&\n"; } }; int main() { C x; x.foo(); // calls foo() & C{}.foo(); // calls foo() && std::move(x).foo(); // calls foo() && const C cx; cx.foo(); // calls foo() const& std::move(cx).foo(); // calls foo() const&& }