以下はコンパイルされません。
class Foo {
public:
Foo( boost::shared_ptr< Bar > arg );
};
// in test-case
boost::shared_ptr< Bar > bar;
BOOST_CHECK_THROW( Foo( bar ), std::logic_error ); // compiler error here
Barの実装は重要ではありません。コンパイラは、Fooに適切なデフォルトコンストラクタがない(VC ++ 2005)と文句を言います。デフォルトのコンストラクターを追加すると、それが機能し、実際に呼び出されます。このステートメントにデフォルトのコンストラクターが必要なのはなぜですか?