Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <utility>
- class Foo
- {
- int v;
- public:
- explicit Foo(int c) noexcept;
- Foo(const Foo&) noexcept;
- Foo(Foo&&) noexcept;
- ~Foo();
- };
- Foo mutable_return(int c)
- {
- Foo a(c), b(c + 1);
- return c > 0 ? a : b;
- }
- Foo const_return(int c)
- {
- const Foo a(c), b(c + 1);
- return c > 0 ? a : b;
- }
- Foo explicit_const_return(int c)
- {
- const Foo a(c), b(c + 1);
- return std::move(c > 0 ? a : b);
- }
- Foo explicit_mutable_return(int c)
- {
- Foo a(c), b(c + 1);
- return std::move(c > 0 ? a : b);
- }
- Foo::Foo(int c) noexcept
- : v(c)
- { std::cout << "Foo(int)\n"; }
- Foo::Foo(const Foo& o) noexcept
- : v(o.v)
- { std::cout << "Foo(const Foo&)\n"; }
- Foo::Foo(Foo&& o) noexcept
- : v(o.v)
- { std::cout << "Foo(Foo&&)\n"; }
- Foo::~Foo()
- { std::cout << "~Foo()\n"; }
- int main()
- {
- std::cout << "Mutable\n";
- mutable_return(0);
- std::cout << "\nConst\n";
- const_return(0);
- std::cout << "\nExplicit Mutable\n";
- explicit_mutable_return(0);
- std::cout << "\nExplicit Const\n";
- explicit_const_return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement