オブジェクト/変数などのタイプを照会するために 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 の存在下でこのように動作するようにスコープ解決が行われた理由についてのアイデアはありますか?
PS:違いがある場合は、MSVC2012 を使用しています ( Nov CTPなし)