ロベールの小部屋 このページをアンテナに追加 RSSフィード

2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |

2010-04-30 (金) Visual C++ 2010 の C++0x 対応状況チェック

[][] Visual C++ 2010 の C++0x 対応状況チェック 17:38  Visual C++ 2010 の C++0x 対応状況チェックを含むブックマーク

色んなコンパイラC++0x をサポートし始めているが、VC++ もご多分に漏れずサポートを始めている。

そんなわけで、VC++ 2010 の C++0x 対応状況を調べてみた。

全仕様を把握しているわけではないので、足りないものがあったらつっこんで欲しい。


実装済

  • auto 変数宣言
  • decltype
  • ラムダ式
    ただし、ラムダ式から関数ポインタへの変換はできない。提案時期が時期なので実装が中途半端の方には入れないでおく
  • 右辺値参照
  • ムーブコンストラクタ、ムーブ代入演算子
  • スマートポインタ(std::unique_ptr, std::shared_ptr, std::weak_ptr)
  • nullptr
    ただし、NULLは相変わらず0で定義されている。ただ、NULLの定義は処理系定義なので、別に規格違反ではない(不親切だが)
  • long long
  • テンプレート引数の括弧の連続記述
    std::vector<std::vector<int>> v; など
  • enum-base
    enum A : short { a }; など
  • static_assert
  • trailing return type
    auto foo() -> int { return 0; } など
  • 可変個引数マクロ
  • cstdint, initializer_list, typeindex, forward_list, system_error ヘッダ

実装が中途半端


未実装

  • = default
  • = delete
  • constexpr
  • range-based for
    for (int x: array) { ... } など。所謂 foreach
  • enum class
    enum class A { a }; A a = A::a; など
  • raw string literal
  • 属性
  • alignof
  • noexcept
  • ユーザ定義リテラル
  • コンストラクタの委譲呼び出し
    struct Point { Point(int x, int y) : x(x), y(y) {} Point() : Point(0, 0) {} int x, y; }; など
  • コンストラクタ継承
    struct A { A(int n); }; struct B : A { using A::A; }; B b(2); など
  • 可変個テンプレート引数
  • cstdbool, ratio, chrono, cuchar, ctgmath, cinttypes, atomic, thread, mutex, condition_variable, future ヘッダ

規格準拠率(といってもまだ規格として成立していないが)はかなり低いが、実装されている仕様はおそらく実装の優先順位が高いと判断されたものなのだろうし、逆に、C99 をガン無視してた割に C++0x サポートに前向きなのは、それらを実装したかったからなのかなあと思ったり。

C++0x はあまり広まらないと思ってたけど、意外と使われるようになるかもしんない。


range-based for、constexpr、コンストラクタの委譲呼び出し、コンストラクタ継承、= default、= delete あたりが実装されてないのはちょっと意外だった。

可変個テンプレート引数が実装されてないのはある意味予想通りだが、可変個引数マクロに対応してるのはちょっと意外。

ユーザ定義リテラルに至ってはそもそも規格として採用されるのか心配するところから始めないといけない。

ラムダ式のついでに実装したと思われる trailing return type だけど、これも本当に採用されるのかな?

名無し名無し 2010/09/04 03:08 Strongly Typed Enumsは微妙
VC++的にはC++0xのものではなくC++/CLIのものをネイティブ側に持ち込んでいる認識らしい
根拠は2005から2010までずっとC4480警告

RobeRobe 2010/09/05 02:44 なるほど
拡張機能として使えるようテストはしてあるはずなので
警告外せばいいだけのような気もしますが、
それすら後回しにされるほど優先順位の低い機能なんでしょうかね

トラックバック - http://d.hatena.ne.jp/Robe/20100430