#include <iostream>
#include <type_traits>
#include <vector>
class A
{
public:
int a;
int b;
};
template<typename T>
struct IsClass
{
enum { Yes = std::is_class<T>::value };
enum { No = !Yes };
};
int main(int argc, char* argv[])
{
std::vector<int> v1;
std::vector<A> v2;
auto it1 = v1.begin();
auto it2 = v2.begin();
std::cout << IsClass<std::decay<decltype(it1)>::type::value_type>::Yes << std::endl;
std::cout << IsClass<std::decay<decltype(it2)>::type::value_type>::Yes << std::endl;
std::cin.get();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx2ZWN0b3I+CgpjbGFzcyBBCnsKcHVibGljOgogICAgaW50IGE7CglpbnQgYjsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBJc0NsYXNzCnsKCWVudW0geyBZZXMgPSBzdGQ6OmlzX2NsYXNzPFQ+Ojp2YWx1ZSB9OwoJZW51bSB7IE5vID0gIVllcyB9Owp9OwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKewoJc3RkOjp2ZWN0b3I8aW50PiB2MTsKCXN0ZDo6dmVjdG9yPEE+IHYyOwoJYXV0byBpdDEgPSB2MS5iZWdpbigpOwoJYXV0byBpdDIgPSB2Mi5iZWdpbigpOwoKCXN0ZDo6Y291dCA8PCBJc0NsYXNzPHN0ZDo6ZGVjYXk8ZGVjbHR5cGUoaXQxKT46OnR5cGU6OnZhbHVlX3R5cGU+OjpZZXMgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IElzQ2xhc3M8c3RkOjpkZWNheTxkZWNsdHlwZShpdDIpPjo6dHlwZTo6dmFsdWVfdHlwZT46OlllcyA8PCBzdGQ6OmVuZGw7CgoJc3RkOjpjaW4uZ2V0KCk7CglyZXR1cm4gMDsKfQ==