Visual Studio 2013 RCが出た
Visual Studio 2013 RCがリリースされました。
C++が好きな自分としてはPreviewから更に新しく追加されたC++11/14の機能が気になります。(自分はC99については分からないので触れていません)
さっそくPremium版をインストールして遊んでみました。
#include <type_traits> #include <cassert> class sample { public: //自動生成される関数のdefault/delete指定 sample() = default; ~sample() = default; sample(const sample&) = delete; sample& operator=(const sample&) = delete; //暗黙のムーブコンストラクタ、ムーブ代入演算子は未対応 //sample(sample&&) = default; //非静的データメンバの初期化 int value = 42; //usingによるtypedef using type = int; }; //delete function void func(int); void func(double) = delete; //template alias template <class T> using identity = std::common_type<T>; identity<double>::type d = 3.14; //STLのtemplate alias対応 std::make_unsigned_t<int> n = 10U; //sscriskさんのブログで触れられていたバグが治っているか検証 参考 ttp://sscrisk.hatenablog.com/?page=1377074047 static_assert(std::is_standard_layout<int&>::value == false, ""); static_assert(std::is_standard_layout<int&&>::value == false, ""); //治ってない //static_assert(std::is_trivially_copyable<int&>::value == false, ""); //static_assert(std::is_trivially_copyable<int&&>::value == false, ""); static_assert(std::is_trivially_copyable<void>::value == false, ""); static_assert(std::is_trivial<int&>::value == false, ""); static_assert(std::is_trivial<int&&>::value == false, ""); static_assert(std::is_scalar<std::nullptr_t>::value, ""); int main() { sample s; assert(s.value == 42); //decltypeから直接メンバを呼び出せない(対応お願いします) //decltype(s)::type i = 0; }
上記のコードがコンパイル通りました。CTPでは更にC++11/14の機能が追加されるようです。
早くconstexpr来て欲しいですね…
すごくどうでもよいこと
using aliasによって今後新しいプロジェクトではtypedefキーワードが空気になってしまうのではないでしょうか。個人的にtypedefキーワードがC++03時代のautoキーワードみたいな存在になってしまうのではないかと思っています。また同時に、usingキーワードにどんどん色んな機能を持たせているようにも見えます。どのキーワードも腐ることなく機能を分散できたらいいのになと思いました。*1
*1:registerやvolatileやexportなどはどうすればいいんでしょう…