初期化子に付随する、function-try-block があれば、
コンストラクタで失敗したときにログを吐く場合も有効。

struct foo
{
 auto_ptr< bar > x;
 auto_ptr< bar > y;
 
 // function-try-block が利用できる場合(非常に便利)
 foo( int v )
  try : x( new bar( v ) ), y( new bar( v ) ) {}
catch( exception const & e ) {
   cout << "初期化失敗:" << e.what() << endl;
  } // ここで例外が自動的に再スローされる。

 // function-try-block が利用できない場合(非常に不便)
 foo( int v, bad_tag )
 {
  try {
   x = auto_ptr< bar >( new bar( v ) );
   y = auto_ptr< bar >( new bar( v ) );
  }
  catch( exception const & e ) {
   cout << "初期化失敗:" << e.what() << endl;
   throw e; // 自分で再度投げる
  }
 }
};