decltypeはオブジェクト/変数のタイプなどを照会するために使用されることは私の理解です。次のようなウィキペディアに存在する例から、なぜdecltypeの存在下でスコープ解決が失敗するのですか?
:
int i;
decltype(i) x3; // type is int
は、私はこのような何かを行うことができ仮定:
class A
{
public:
int a, b;
};
template<typename T>
struct IsClass
{
enum { Yes = std::is_class<T>::value };
enum { No = !Yes };
};
std::vector<A> v;
auto it = v.begin();
IsClass<decltype(it)::value_type>::Yes
すべてこの行は合法である後ので:
IsClass<std::vector<A>::iterator::value_type>::Yes
これは、次の理由でコンパイルされませんでした。error C2039: 'value_type' : is not a member of '
グローバル名前空間 '' `
なぜ、スコープ解決がdecltypeの存在下でこのように動作するのかについてのアイデアはありますか?
P.S:それは(11月のCTPなし)MSVC2012を使用して私はすべての違いを作る場合
'gcc'と'これを受け入れるように見えるclang':http://coliru.stacked-crooked.com/view?id=bc884ca6b1f51d36c231f2eb08dec3ad-f674c1a6d04c632b71a62362c0ccfc51 –
@ShafikYaghmour私はちょうど私が使用しているどのMSVC2012にこれを貼り付け(Iこの効果のノートを追加しました)、コンパイルされません。 – Borgleader
MSVCはうまくいっていますが、gccとclangと同じ標準を実装していません。 – aaronman