Visual Studio 2013 を試してみた
先日 Visual Studio 2013 がリリースされたということなので C++11 的な意味で試してみました。
Visual Studio 2013 では以下の C++11 の機能が新しく実装されました。
- Non-static data member initializers
- Variadic templates
- Initializer lists
- Default template arguments for function templates
- Alias templates
- Delegating constructors
- Explicit conversion operators
- Raw string literals
- Defaulted and deleted functions
http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx
[ソース]
#include <iostream> #include <vector> #include <string> // Variadic templates template<typename... Args> void func(Args... args){ // Initializer lists for(auto&& n : { args... }){ std::cout << n << std::endl; } } template<typename T> struct X{ T value; X(int n) : value(n){} }; struct person{ // Non-static data member initializers int age = 13; std::string name = "homu"; }; // Aliases templates template<typename T> using my_vector = std::vector<X<T>>; int main(){ std::cout << _MSC_VER << std::endl; // Initializer lists my_vector<int> v = { X<int>{1}, X<int>{2}, X<int>{3}}; for(auto&& n : v){ std::cout << n.value << std::endl; } func(1.1, 2.2, 3.3, 4.4, 5.5); person homu; std::cout << homu.name << std::endl; std::cout << homu.age << std::endl; return 0; }
[出力]
1800 1 2 3 1.1 2.2 3.3 4.4 5.5 homu 13
Visual Studio 2012 とはなんだったのか…という勢いで C++11 の機能が実装されていますね。
Variadic templates、Initializer lists、Non-static data member initializers あたりが入ってやっとまともに C++ のコードが書けそうです。
Alias templates や Default template arguments for function templates、Raw string literals も地味に嬉しいですね。
あとメジャーな機能で実装されていないのは constexpr や Inheriting constructors や User-defined literals や constexpr や constexpr でしょうか。
C++14 も視野に入っているようなので次が楽しみですね。