Visual Studio 2012 に C++11 の機能が追加されるらしい
Visual Studio 2012 に新しい C++11 の機能が追加される(された?)らしいので試してみました。
今回実装されたのは下記の機能です。
- Variadic templates
- Uniform initialization and initializer_lists
- Delegating constructors
- Raw string literals
- Explicit conversion operators
- Default template arguments for function templates
だいぶいい感じの機能が実装されているみたいですね。
Variadic Templates や InitializerList は喉から手が出るほど欲しかった機能。
Default template arguments も地味に嬉しい。
[導入方法]
導入するにあたり予め Visual Studio 2012 をインストールしておく必要があります。
(わたしは Visual Studio 2012 Desktop Express で試しました。
Visual Studio を導入したらこちらからパッチを落としてきてインストールします。
インストール後に Visual Studio を立ちあげて、
- 1.プロジェクトのプロパティ
- 2.[全般]→[プラットフォーム ツールセット]を選択
- 3.Microsoft Visual C++ Compiler Nov 2012 CTP (v120_CTP_Nov)' を選択
- 4.プロジェクトをリビルド
で使用することが出来るようになります。
[ソース]
#include <iostream> #include <vector> #include <initializer_list> #include <string> struct X{ std::string name; int age; }; template<typename ...Args> void disp(Args... args){ for(auto&& n : std::initializer_list<int>{args...}){ // for(auto&& n : {args...}){ std::cout << n << std::endl; } } int main(){ std::initializer_list<int> v = {1, 2, 3, 4, 5}; for(auto&& n : v){ std::cout << n << std::endl; } disp(6, 7, 8, 9, 10); // std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9}; X x{"homu", 14}; std::cout << x.name << std::endl; std::cout << x.age << std::endl; return 0; }