Home / ぼやきごと / 2015-08-08 / Hello, Visual C++ 2015.
Hello, Visual C++ 2015.

Hello, Visual C++ 2015.

PC組み換えやWindows10への更新もあって遅れましたが、 Visual Studio 2015 のCommunity版をインストールしました。

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

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

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 
 
-
!
-
-
!
|
-
!
|
-
-
!
!
|
-
!
-
-
!
!
!
 
 
-
-
!
|
-
|
!
|
-
!
|
-
|
|
!
|
|
|
|
|
!
#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 のページを見れば済む話なんですが。

Category: [C++][Visual Studio][プログラミング] - 2015-08-08 06:34:49