C++14 integral_constantに関数呼び出し演算子を追加

N3545 An Incremental Improvement to integral_constant


C++14では、std::integral_constantクラスに、関数呼び出し演算子が追加されます。
この関数呼び出し演算子は、メンバ定数として持っているvalueを返すだけです。

// <type_traits>
namespace std {
  template <class T, T v>
  struct integral_constant {
    static constexpr T value = v;
 
    using value_type = T;
    using type = integral_constant<T,v>;
 
    constexpr operator value_type() { return value; }
    constexpr value_type operator()() { return value; } // 追加
  };
}

メタ関数の適用結果として::valueの代わりに関数呼び出し演算子を使用することで、コードが短くなります。

#include <type_traits>

int main()
{
    constexpr bool b = std::is_integral<int>{}();
    static_assert(b, "b must be true");
}