constexprを使用してテンプレートに浮動小数点定数を渡す

double でテンプレートメタプログラミング - iorateの日記


できた! in GCC 4.6。

#include <iostream>

struct pi {
    static constexpr double value = 3.14;
};

template <const double& r>
struct circle_area {
    static constexpr double value = r * r * pi::value;
};

struct radius {
    static constexpr double value = 2.5;
};

int main()
{
    constexpr double result = circle_area<radius::value>::value;

    static_assert(result == 19.625, "not equal");
    std::cout << result << std::endl;
}
19.625

やった!
クラス内定数でstatic constexpr doubleができるようになったのが実現ポイントですねぇ。