クラスの値渡し、戻り値

g++とVCで結果が違う…

#include <iostream>

using namespace std;

inline void debug(const char *s, long id) {
  cerr << s << ":" << id << endl;
}

class Foo {
private:
  int i;

public:
  Foo(int i) : i(i) { debug("Foo::Foo()", i); };
  ~Foo() { debug("Foo::~Foo()", i); };
};

Foo func(Foo foo) {
  Foo foo2(2);
  debug("in func()", (long) &foo2);
  return foo2;
}

int main() {
  Foo foo1(1);
  Foo foo2 = func(foo1);
  debug("out func()", (long) &foo2);
  return 0;
}

g++


Foo::Foo():1
Foo::Foo():2
in func():2280624
Foo::~Foo():1
out func():2280624
Foo::~Foo():2
Foo::~Foo():1

VC


Foo::Foo():1
Foo::Foo():2
in func():1244740
Foo::~Foo():2
Foo::~Foo():1
out func():1245000
Foo::~Foo():2
Foo::~Foo():1

なんでg++だと関数内のfoo2が返されるんだろう?
スコープアウトしたら破棄されないのかなぁ?
VCは一時オブジェクトは作成されないのかなぁ?