C++11とconstexprに関するtyosuke2011のブックマーク (2)
-
C++ Advent Calendar 2012 2日目の記事…なんですが、書きたいことが2つあったので2部作にしてしまいましたてへぺろ︵・ω<︶ と、いう事で本記事は前編になります。 後編はこちら。 Boost.TypeErasure 概要 constexprライブラリである Sprout の布教を簡単に。 動作環境 本記事内では下記の環境で動作テストを行なっています。 コンパイラ‥gcc 4.7.2 Sprout ‥commit d57b6e2b182144b8896f116f2d1b495f3e53436a︵2012/12/02/12:00︶ constexprとは constexprとは C++11に追加されたキーワードで、constexprを指定することでコンパイル時定数として扱われます。 例えばこんな感じで使うことが出来ます。 template<int N> stru
-
さて、constexprを使っていると次のように関数内で static_assert を行いたい場合があると思います。 template<typename T> void check(T t){ // t を参照して static_assert にしたい static_assert(t % 2 == 0, ""); } constexpr int a = 2; check(x); // error: 't' is not a constant expression しかし、上記のコードでは check 関数内で constexprかどうかの判断が行えないのでコンパイルエラーになってしまいます。 これを回避する方法として、構造体内で constexpr関数を定義する方法があります。 template<typename T> void check(T t){ // operator in
-
1