我目前正在研究一些可以在较新版本的 GCC 上编译但不能在旧版本上编译的代码。在我的情况下,我使用从一个数据结构到自定义数据结构的一些数据std::back_inserter
。std::copy
但是,如果我忘记了typedef value_type & const_reference
这个自定义数据结构中的 typedef,这将不会在 GCC 4.4 上编译。相同的代码在 GCC 4.5 上编译并运行得很好。
这两个编译器版本之间有什么区别,这使得代码可以在一个版本上编译,但不能在另一个版本上编译。我猜想这与 C++11 的实现有关,在 GCC 4.4 中它的完成度要低得多。decltype
我猜可能是带有或另一个新的 C++11 关键字的东西。
如果我在std::back_inserter
不定义const_reference
类型的情况下使用,这段代码是否正确?我通常认为必须实现全套 typedef ( value_type
,reference
等const_reference
) 才能与 STL 算法库兼容?或者我可以安全地假设如果我的代码在这种情况下编译,我没有调用任何危险的东西(例如移动语义,这会破坏我的其他数据结构)。