我很希望POD_STL成为一套不使用任何预编译宏隔离就能兼容多种主流编译器的代码。这个目标很有挑战性,需要每行代码严格符合C++标准,并且考虑各种编译器的不同实现特点。事实上,我还没见过哪套STL代码达到过这个目标,POD_STL有可能会是世界上第一个。
POD_STL在开发过程中是在VS2013环境下编译调试的。近期,有项目组将其移植到了Linux环境,用GCC编译。在移植的过程中遇到了一些问题,在此予以记录和分享。
问题1:
对于这行代码:
<span style="font-size:18px;">typedef reverse_iterator<iterator> reverse_iterator;</span>
GCC在编译期报错:Line 308: /home/l00220173/tfp_20150507/product/transdata/code/source/fei/drvadp/POD_STL/headers/pod_list:193: error: declaration of 'typedef class DRVADP_V1::reverse_iterator<DRVADP_V1::_ListIterator<_Tp, DRVADP_V1::_NonConstTraits<_Tp> > > DRVADP_V1::list<_Tp>::reverse_iterator'
Line 309: /home/l00220173/tfp_20150507/product/transdata/code/source/fei/drvadp/POD_STL/headers/_iterator.h:16: error: changes meaning of 'reverse_iterator' from 'class DRVADP_V1::reverse_iterator<DRVADP_V1::_ListIterator<_Tp, DRVADP_V1::_NonConstTraits<_Tp> > >'
这个问题可以在这里找到解答:
http://stackoverflow.com/questions/12187549/typedef-changes-meaning
摘录部分文字如下:
typedef A<T> A;
vs
typedef ::A<T> A;
This also applies to using statements as well of the form:
using A = A<T>;