C++と色々

主にC++やプログラムに関する記事を投稿します。

C++14の言語機能の一部で少しサンプルを

clang3.4で動きました。

#include <type_traits>
#include <cassert>

//通常の関数の戻り値の型推論
template <class T, class U>
constexpr auto add(T t, U u)
{
    return t + u;
}

//constexpr関数の制限緩和
constexpr int factorial(int n)
{
    int sum = 1;
    for (int i = n; 0 < i; --i)
    {
        sum *= i;
    }
    return sum;
}

//変数テンプレート
template <class T, class U>
constexpr bool is_same_c = std::is_same<T, U>::value;

int main()
{
    //2進数リテラル
    constexpr int a = 0b10;
    //decltype(auto)
    decltype(auto) b = a;
    
    //ジェネリックラムダ
    auto sub = [](auto l, auto r){return l - r;};
    static_assert(add(a, b) == 4, "");
    
    assert(sub(a, b) == 0);
    
    static_assert(is_same_c<int, int>, "");
    static_assert(factorial(5) == 120, "");
}

他には一般化されたラムダキャプチャとか、数値の桁区切りとか、deprecated属性とか、実行時サイズの配列とかが入ることが確定しているみたいです。