在MSVC2010中,以下代码给出:
error C2039: 'my_type' : is not a member of ''global namespace''
template<typename T>
class C
{
public:
typedef T my_type;
};
C<int> c;
auto f = [&c]() {
decltype(c)::my_type v2; // ERROR C2039
};
我找到了一种解决问题的蹩脚方法,但我想知道当你只有一个对象实例时,获取typedef的正确方法是什么。
答案 0 :(得分:1)
从一组非常有用的评论我得到了一个有效的解决方案。感谢大家。 remove_reference用作身份对象的双重目的。
template<typename T>
class C {
public:
typedef T my_type;
};
void g() {
C<int> c;
auto f = [&c]() {
typedef remove_reference<decltype(c)>::type::my_type my_type;
my_type v; // Works!!
};
}