RVO はコピー コンストラクターを必要としませんが、このコードはerror C2248: 'A::A' : cannot access private member declared in class 'A'
VS2010 で生成されます。これを証明するには、A(const A&);
以下の宣言を public にするだけで、コピー コンストラクターの定義がなくても、コードは問題なく実行されます。
class A
{
int i;
A(const A&);
public:
A() : i(1) {}
};
A f() { return A(); }
int main()
{
A a;
a = f();
}