Почему не удается разрешить область при наличии 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?
П.С .: Если есть какая-то разница, я использую MSVC2012 (без ноябрь ОСАГО)