Template Meta-Programming

boost::enable_ifを特殊化する(後編)

上の問題はOtherTからTへの暗黙の変換がない場合でも,第2引数の型が存在することが原因でした.そこで,OtherTからTへの暗黙の変換が存在しない場合に存在しないような型を定義してやれば良いことになります. 方法は私が知っている範囲で2つあります. 第1…

boost::enable_ifを特殊化する(前編)

さて,上のSFINAEで用いたenable_ifですが若干長ったらしいのが気になります. typename boost::enable_if >::type これを以下のように書けたら良いと思いませんか? typename enable_if_convertible::type まぁ,この程度ならさほど(というかほとんど)必…

type_traits(メタ関数)とSFINAE

さて,以上でCからCへ暗黙に変換できるようになったわけですが,実は一つ問題が残っています.問題は以下のコードを実行すると分かります. std::cout , C >::value boost::is_convertibleはBoost.TypeTraitsライブラリにあるメタ関数で,型から型への暗黙の…

コンストラクタテンプレート

今日の話題はSFINAE(Substitution Failure Is Not An Error),およびSFINAEを活用する基礎ツールとなるboost::enable_ifについての話題です.以下ではSFINAEについての基本的な知識,およびboost::enable_ifについての知識を仮定します. SFINAEについてはK.…