¿Por qué falla la resolución de alcance en presencia de decltype?

Tengo entendido que decltype se usa para consultar el tipo de objetos / variables y así sucesivamente.

De los ejemplos presentes en wikipedia, como los siguientes:

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

Asumí que podría hacer algo como esto:

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

Porque después de todo esta línea es legal:

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

Lamentablemente no compilaría, citando lo siguiente:error C2039: 'value_type' : is not a member of 'espacio de nombres global ''

¿Alguna idea de por qué se hizo la resolución de alcance para comportarse de esta manera en presencia de decltype?

P.S: Si hay alguna diferencia, estoy usando MSVC2012 (sin el CTP de noviembre)

Respuestas a la pregunta(1)

Su respuesta a la pregunta