C++14: Variable templates

Variable templates は定数を任意の型で定義する事ができるようになる機能です。
以前の書き方では πなどの定数を任意の型で使用できるようにする場合、

template<typename T>
struct PI{
    static const T value;
};

template<typename T>
const T PI<T>::value = T(3.1415926535897932385);

float  f = PI<float>::value;
double d = PI<double>::value;

と、いうような書き方をする必要がありました。
Variable templates はこういう『定数を任意の型で定義したい』場合に利用する事が出来ます。

template<typename T>
constexpr T PI = T{3.1415926535897932385};

float f = PI<float>;    // float 型
double d = PI<double>;  // double 型


template<typename T>
T evens = T{0, 2, 4, 6, 8, 10};

std::vector<int> vec  = evens<std::vector<int>>;
std::list<int>   list = evens<std::list<int>>;

実装コンパイラ

  • Clang 3.4
  • GCC 5.0

参照