模板内部的 C++ decltype class
C++ decltype in template inner class
下面的例子说明了我的问题:
#include <vector>
template <class T>
class TestNest{
public:
std::vector<T> m_list;
class InsideNest{
const TestNest<T>* m_test;
decltype(m_test->m_list.begin()) m_iter;
public:
InsideNest(const TestNest<T>* source)
:m_test(source)
,m_iter(source->m_list.begin())
{}
};
};
int main(int argc, char *argv[])
{
TestNest<int> outside;
TestNest<int>::InsideNest inside(&outside);
}
无法编译的部分(至少在 MSVC2013 中没有)是 decltype(m_test->m_list.begin())
。知道如何解决这个问题吗?
编辑:更改代码以显示 main() 和 #include
关闭问题。这是MSVC2013的缺点。它将在 "working out" 成员的完整类型之前解析 decltype()
,因此在 decltype 内部对方法的任何访问都是编译器错误。
即使使用全局模板函数(例如 decltype(std::begin(m_list))
)也不起作用。
其他更现代的编译器可以工作。
下面的例子说明了我的问题:
#include <vector>
template <class T>
class TestNest{
public:
std::vector<T> m_list;
class InsideNest{
const TestNest<T>* m_test;
decltype(m_test->m_list.begin()) m_iter;
public:
InsideNest(const TestNest<T>* source)
:m_test(source)
,m_iter(source->m_list.begin())
{}
};
};
int main(int argc, char *argv[])
{
TestNest<int> outside;
TestNest<int>::InsideNest inside(&outside);
}
无法编译的部分(至少在 MSVC2013 中没有)是 decltype(m_test->m_list.begin())
。知道如何解决这个问题吗?
编辑:更改代码以显示 main() 和 #include
关闭问题。这是MSVC2013的缺点。它将在 "working out" 成员的完整类型之前解析 decltype()
,因此在 decltype 内部对方法的任何访问都是编译器错误。
即使使用全局模板函数(例如 decltype(std::begin(m_list))
)也不起作用。
其他更现代的编译器可以工作。