ぼやきごと/2015-08-08/Hello, Visual C++ 2015. の変更点


#blog2navi()
*Hello, Visual C++ 2015. [#j3589f23]

PC組み換えやWindows10への更新もあって遅れましたが、 [[Visual Studio 2015>https://www.microsoft.com/ja-jp/dev/products/visual-studio-2015.aspx]] のCommunity版をインストールしました。

やはり気になるのは Visual C++ のC++規格対応状況です。

-[[コンパイラの実装状況 - cpprefjp>http://cpprefjp.github.io/implementation-status.html]]

ひとまず上記ページを参考にして Visual C++ 2013 では書けなかったコードを書いてみました。

#code(c){{
#include <utility>
#include <iostream>

// [C++11] inline namespace
inline namespace detail
{
    // [C++14] 通常関数の戻り値型推論
    auto& get_cout() { return std::cout; }

    // [C++11] constexpr
    template<class T>
    constexpr auto plus15(T src)
    {
        // [C++14] 2進数リテラル
        return src + 0b1111;
    }

    // [C++11] ユーザ定義リテラル(定義側)
    constexpr auto operator "" _x2(unsigned long long src)
    {
        // 元の値を2倍にして返す
        return src * 2;
    }
} // namespace detail

int main(int, char**)
{
    // [C++14] decltype(auto)
    decltype(auto) out = get_cout();

    // [C++14] 汎用ラムダキャプチャ
    // [C++14] ジェネリックラムダ式
    auto put = [&o = out](auto&& arg) { o << arg; };

    // [C++11] Unicode文字列リテラル
    put(u8"Hello, Visual C++ ");

    // [C++11] thread_local
    // [C++14] 数値リテラルの桁区切り
    // [C++11] ユーザ定義リテラル(利用側)
    thread_local auto value = 2'000'000 / 500_x2;

    put(plus15(value));
    put(".\n");

    return 0;
}
}}

こんな感じのコードが問題なくビルドできます。感動。

当サイトの [[プログラミング/C++/VC++のC++規格対応状況]] のページも近日中に更新しておきます。まぁ前述した cpprefjp のページを見れば済む話なんですが。

RIGHT:Category: &#x5b;[[C++>ぼやきごと/カテゴリ/C++]]&#x5d;&#x5b;[[Visual Studio>ぼやきごと/カテゴリ/Visual Studio]]&#x5d;&#x5b;[[プログラミング>ぼやきごと/カテゴリ/プログラミング]]&#x5d; - 2015-08-08 06:34:49
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()