#include <iostream>

struct A {
int n;
A(int i): n(i+1) {
std::cout << "value init" << std::endl;
}
A(const A& rhs): n(rhs.n) {
std::cout << "const copy init" << std::endl;
}
A(A& rhs): n(rhs.n) {
std::cout << "copy init" << std::endl;
}
operator int() const { return n; }
};

int main()
{
A x(0);
A y=x;
A z(x);
std::cout << x.n << std::endl;
std::cout << y.n << std::endl;
std::cout << z.n << std::endl;
}