この質問に取り組んでいると、一貫性のない動作が見つかりました。
コンストラクターで参照バインディングの動作が一般的な関数と異なるのはなぜですか?
struct A {
};
struct B : public A {
B(){}
private:
B(const B&);
};
void f( const B& b ) {}
int main() {
A a( B() ); // works
A const & a2 = B(); // C++0x: works, C++03: fails
f( B() ); // C++0x: works, C++03: fails
}
厳密なC++03モードでC++0x拡張機能を無効にしてg++-4.1とComeau4.2.45.2を使用してC++03でテストしました。同じ結果が得られました。
C ++ 0xの場合、g++-4.4およびComeau4.3.9をリラックスモードで使用し、C++0x拡張機能を有効にしてテストしました。同じ結果が得られました。