読者です 読者をやめる 読者になる 読者になる

C++と色々

主にC++やプログラムに関する記事を投稿します。

decltype

自分の理解が間違っているのか、MSVC Nov 2012 CTPが対応していないのか、が分からないのでブログに投げてみるテスト。
std::vector v;
decltype(v)::value_type n;
ってill formedですか?

#include <vector>

template <class T>
struct type_holder
{
    typedef T type;
};

int main()
{
    using std::vector;

    vector<int> v1;
    //vector<decltype(v1)::value_type> v2;//error
    vector<type_holder<decltype(v1)>::type::value_type> v2;//ok
    return 0;
}

templateはさむとやりたいことは達成できるが…

参考文献
"decltypeで取得した型内のネストした型を使う方法"http://d.hatena.ne.jp/eldesh/20090925/1253827973(2012/12/06アクセス)

2013/6/7追記

どうやらdecltypeを用いてメンバ型にアクセスできるように決まったのが、C++11の中で最後のほうなようです。なのでC++0x対応のVisual C++ 11.0では未対応ということです。