【发布时间】:2015-05-12 18:54:39
【问题描述】:
在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 的正确方法是什么。
【问题讨论】:
-
升级你的编译器版本或者依赖或者变通办法,我想到的一个是
identity<decltype(c)>::type::my_type v2;和template <class T> struct identity { typedef T type; }; -
完美,谢谢!我不确定这是 VC2010 的问题,还是我只是不明白该怎么做。
-
您也不需要捕获
c(如果它是全局的或静态的)。 -
是
c是C<int>还是C<int>&在 lambda 的主体中?虽然捕获全局变量毫无意义,但也许编译器实际上正在这样做?尝试加入衰减或删除参考? -
@tukra 然后
decltype(c)会是C<int>&不是吗?并且C<int>&::my_type没有多大意义(也许它应该可以工作,但我可以看到一个吱吱作响的编译器失败,即使它应该)。试试typename std::remove_reference<decltype(c)>::type::my_type?