Warum schlägt die Bereichsauflösung fehl, wenn decltype vorhanden ist?

Nach meinem Verständnis wird decltype verwendet, um den Typ von Objekten / Variablen usw. abzufragen.

Aus den Beispielen auf Wikipedia, wie zum Beispiel den folgenden:

int i;
decltype(i) x3; // type is int

Ich nahm an, ich könnte so etwas machen:

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

Denn immerhin ist diese Zeile legal:

IsClass<std::vector<A>::iterator::value_type>::Yes

Leider würde es nicht kompilieren, unter Berufung auf Folgendes:error C2039: 'value_type' : is not a member of 'globaler Namespace '' '

Irgendwelche Ideen, warum die Bereichsauflösung vorgenommen wurde, um sich in Gegenwart von decltype so zu verhalten?

P.S: Wenn es einen Unterschied macht, verwende ich MSVC2012 (ohne das Nov CTP)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage