| #include <stdio.h> | |
| static int X = 0; | |
| struct T { | |
| int V; | |
| T() : V(++X) { printf("Construct %d\n", V); } | |
| T(const T &) : V(++X) { printf("Copy Construct %d\n", V); } | |
| ~T() { printf("Destruct %d\n", V); } | |
| void operator=(const T &t) { | |
| printf("Overwrite %d with %d\n", V, t.V); | |
| V = t.V; | |
| } | |
| }; | |
| T func(const T &t) { return T(); } | |
| T test(bool C) { | |
| return C ? T() : func(T()); | |
| } | |
| int main() { | |
| T x; | |
| x = test(true); | |
| return 0; | |
| } |