Clang(svn) に Relaxing constraints on constexpr functions が実装されていた
多分、先月末だと思うんですが Clang に Relaxing constraints on constexpr functions が実装されました。
C++11 の constexpr 関数はいろいろと制限があったんですが、C++14 ではこれが緩和され、一般ユーザー(非中3女子)にも扱いやすくなります。
例えば次のようなコードを記述することができます。
[ソース]
constexpr int abs(int x){ if( x < 0 ){ x = -x; } return x; } template<int Size> constexpr int max(int const (&array)[Size]){ int result = array[0]; for(int i = 1 ; i < Size ; ++i){ if( array[i] > result ){ result = array[i]; } } return result; } int main(){ static_assert(abs( 4) == 4, ""); static_assert(abs(-4) == 4, ""); constexpr int v[] = {5, 7, 1, 9, 6, 2, 8, 10, 4, 3}; constexpr int result = max(v); static_assert(result == 10, ""); return 0; }
このようにかなり制限が緩和されています。
これを試してみたい方は SVN からソースコードを落としてきて、LLVM/Clang を自ビルドしてください。