Question: ```
#include "stdio.h"

class C {
 public:
  ~C() { printf("~C\n"); }
};

int I(const C& c) { printf("I\n"); return 0; }
void V(int i) { printf("V\n"); }

int main() {
  V(I(C()));
  return 0;
}

```

Seen output:

```
I
V
~C

```

what I would have expected:

```
I
~C
V

```

Answer: 
The call to `V` returns before the full expression has been completely evaluated. And when `V` has returned, it will have printed its stuff (there is a sequence point before returning from `V`). 

The temporary `C()` is only destroyed after the complete full expression has been evaluated.
Why? The temporary lives till the end of the full expression.