無名のオブジェクトを返す

たぶんNRVOが効いてるはず。

#include <iostream>
using namespace std;

class Foo {
private:
  int i;

public:
  Foo(int i);
};

Foo::Foo(int i) : i(i) {}

Foo func() {
  return Foo(100);
}

int main() {
  Foo foo = func();
  cout << &foo << "\n";
  return 0;
}