clang に constexpr が実装された
[適当なテスト]
constexpr int plus(int a, int b){ return a + b; } constexpr int power(int x, int n){ return n == 1 ? x : x * power(x, n-1); } struct X{ constexpr X(int value) : value(value){} constexpr bool operator ==(X const& rhs) const{ return value == rhs.value; } int value; }; int main(){ constexpr auto a = 10; static_assert(a == 10, ""); static_assert(plus(10, 2) == 12, ""); static_assert(power(2, 3) == 8, ""); constexpr X x(42); static_assert(x == X(42), ""); static_assert(!(x == X(41)), ""); return 0; }
clang はじまた。
(ちなみに GIT mirror を使用しました。