Rozumiem, że decltype służy do sprawdzania typu obiektów/zmiennych i tak dalej.Dlaczego rozwiązywanie problemu kończy się niepowodzeniem w przypadku wystąpienia decltype?
Z przykładów obecnych na wikipedii, jak następuje:
int i;
decltype(i) x3; // type is int
Przypuszczałem mógłby zrobić coś takiego:
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
Bo przecież ta linia jest legalne:
IsClass<std::vector<A>::iterator::value_type>::Yes
Niestety nie byłoby skompilować, powołując się na następujące: error C2039: 'value_type' : is not a member of '
globalnej przestrzeni nazw „” `
pomysłów, dlaczego rozdzielczości zakres został wykonany w ten sposób zachowywać się w obecności decltype?
P.S: Jeśli to czyni żadnej różnicy używam MSVC2012 (bez CTP listopada)
'' clang' gcc' i zdają się akceptować to: http://coliru.stacked-crooked.com/view?id=bc884ca6b1f51d36c231f2eb08dec3ad-f674c1a6d04c632b71a62362c0ccfc51 –
@ShafikYaghmour prostu wklejone to pod MSVC2012 który używam (I dodano notatkę do tego efektu) i nie kompiluje się. – Borgleader
MSVC nie ssać choć nie zostały one wykonane z tego samego postępu wdrażania normy jako gcc i brzękiem – aaronman