例外の基本クラス

しょっちゅう自分で投げるクラスは赤くした。
発生タイミングについては、仕様的な記述を見たことがないので、かなり個人的な解釈が含まれている。

std::exception
#include<exception>
std::bad_alloc
#include<new>
new演算子によるメモリ確保に失敗したとき
std::bad_cast
#include<typeinfo>
dynamic_cast演算子に参照を渡した場合の
ダウンキャストに失敗したとき
std::bad_typeid
#include<typeinfo>
typeid演算子の引数に、0 又は NULLを指定したとき
std::logic_error
#include<stdexcept>
事前条件が満たされないとき
std::out_of_range
#include<stdexcept>
引数に指定した値が、有効な範囲の外側を指しているとき
std::invalid_argument
#include<stdexcept>
引数に指定した値が、意味的に正しくない引数のとき
std::length_error
#include<stdexcept>
最大の長さを超える、長さをもつ値による処理を行おうとしたとき
std::domain_error
#include<stdexcept>
上記以外での、範囲・領域に問題があったとき
std::bad_exception
#include<exception>
関数がthrowで指定しているもの以外の例外をスローしたとき
std::runtime_error
#include<stdexcept>
処理を実行した結果、問題が発生したとき
std::range_error
#include<stdexcept>
演算処理の過程において、有効な範囲外の値となったとき
std::overflow_error
#include<stdexcept>
数値演算を行った結果、オーバーフローが発生したとき
std::underflow_error
#include<stdexcept>
数値演算を行った結果、アンダーフローが発生したとき
std::ios_base::failure
#include<ios>
入出力ストリームの処理の中でエラーが発生したとき