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 を使用しました。