一連の記事を書いている中で見つけてしまったもの

この動作はどこにもかかれていないが

catchthrow の問題

記事を書いている内に見つけたものなのだが、

#include <iostream>
#include <stdexcept>


int main( void ) {

  try{ 

    try{ 
      throw std :: runtime_error( "Error!" );
    }
    catch( std :: exception& e ){ 
      throw e; //<- Here
    }
  }
  catch( std :: exception& e ){ 
    std :: cerr << e.what() << std :: endl;
  }


  return 0;
}

上位 try catchcatch の引数を渡しているのだが、これをすると実行結果は

std::exception
Program ended with exit code: 0

最初のコンストラクタで引数に入れた文字列が std :: exception クラスの初期値で上書きされてしまう。 誤って渡してしまわないように注意しなければならない。