Visual Studio 2013 で追加される予定の C++11 の言語機能


上記の記事によると、

  • Default template arguments for function templates.
  • Delegating constructors.
  • Explicit conversion operators.
  • Initializer lists and uniform initialization.
  • Raw string literals.
  • Variadic templates.


Visual Studio 2013 で新しく追加されるC++11 の言語機能のようです。
以前公開された November 2012 Compiler CTP で実装されていた機能がそのまま使用できるような感じですね。


あと標準ライブラリが C++14 に対応し始めているようです。
既に std::make_unique や std::cbegin()/cend() などが追加されています。
ここら辺の対応は素早いですねー。


と、いう事で実際に Visual Studio 2013 Preview 版をインストールして試してみました。
Preview 版のダウンロードはこちらから行うことが出来ます。

[ソース]

#include <iostream>
#include <vector>
#include <memory>
#include <string>

template<typename ...Args>
void
func(Args... args){
    for(auto&& n : {args...}){
        std::cout << n << std::endl;
    }
}

struct X{
    int value;
    std::string name;
};


int
main(){
    func(1, 2, 3, 4, 5);

    std::vector<int> v = {1, 2, 3, 4, 5};
    for(auto&& n : v){
        std::cout << n << std::endl;
    }
    
    X x{42, std::string("mami")};

    auto p = std::make_uniqe<X>(x);
    std::cout << p->value << std::endl;
    std::cout << p->name << std::endl;

    return 0;
}

[出力]

1
2
3
4
5
1
2
3
4
5
42
mami


こんな感じでばっちりと動作しているみたいです。
November CTPとは違い標準ライブラリ側も Initializer list に対応していました。
Variadic Templates も実装されてやっとまともな C++11 のコードが書けるようになりますね!!
constexpr は相変わらず未実装だけど。
C++11 のフルサポートが待ち遠しい。