http://ideone.com/nh39a #include <stdexcept> #include <utility> namespace proto_etude // prototype etude { // あらゆる型として評価できるが,実際に評価されると例外を投げる型 struct undefined_t { // 任意の型への変換 template< class T > operator T&&() const { throw std::logic_error( "etude::undefined must not be used!" ); } }; undefined_t const undefined = {}; // 例外を投げる関数. // throw との違いは,戻り値をあらゆる型として評価できる点 // 例外オブジェクトを指定して例外を投げる // error<