#include <iostream>

class Example
{
    public:
        Example();
        Example(Example const & orig);
        Example & operator= (Example const & orig);
};

Example::Example() {}

Example::Example(Example const & orig)
{
    std::cout << "Copy called." << std::endl;
}

Example & Example::operator=(Example const & orig)
{
    std::cout << "Assign called." << std::endl;
    return *this;
}

int main()
{
    std::cout << "1" << std::endl;
    Example foo;
    std::cout << "2" << std::endl;
    auto x = Example();
    std::cout << "3" << std::endl;
    Example y = x;
    std::cout << "4" << std::endl;
    y = Example();
    return 0;
}