#include <iostream>
struct example
{
    example()
    {
        std::cout << "construct\n";
    }
    ~example()
    {
        std::cout << "destroy\n";
    }
    example(const example & )
    {
        std::cout << "copy\n";
    }
    example(example && )
    {
        std::cout << "move\n";
    }
    example& operator=(const example & )
    {
        std::cout << "assign\n";
        return *this;
    }
    example& operator=(example && )
    {
        std::cout << "move assign\n";
        return *this;
    }
};


example ReturnSomething1()
{
    std::cout << "in 1\n";
    example test;
    std::cout << "created example\n";
    return test;
}
example ReturnSomething2()
{
    std::cout << "in 2\n";
    return example();
}
int main()
{
    std::cout << "1\n";
    example x = ReturnSomething1();
    std::cout << "2\n";
    example y = ReturnSomething2();
    std::cout << "exiting\n";

}