应该g ++ 4.4.7 -std = gnu ++ 0x编译“for each”构造?

时间:2013-07-22 16:07:55

标签: c++ c++11 foreach g++

我目前仍然坚持使用g ++ 4.4.7,并尝试使用它(使用-std = gnu ++ 0x标志)来编译使用“foreach”结构的c ++程序:

190: void
191: Block::get_record_types(D_RecordType_Vector& record_type_vector) const {
192:    for ( D_Record_Map::value_type rt_v_i  : _records) { 
193:
194:        record_type_vector.push_back(rt_v_i.first);
195:    }
196: }

第一个错误让我认为它只是不识别构造:

./c/Block.cpp:192: error: expected initializer before ':' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ';' before '}' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ')' before '}' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ';' before '}' token

这在Apple clang-425上正确编译。

我意识到g ++ 4.4.7已经过时了,但是在给定编译器标志的情况下,它是否应该识别新构造?

2 个答案:

答案 0 :(得分:9)

不,GCC 4.6中添加了支持,请参阅http://gcc.gnu.org/gcc-4.6/changes.html#cplusplushttp://gcc.gnu.org/projects/cxx0x.html

  

我意识到g ++ 4.4.7已经过时了,但是在给定编译器标志的情况下,它是否应该识别新构造?

不,为什么要这样?您建议有人修改C ++解析器以理解新功能,只是为了拒绝它。这将是浪费时间 - 如果有人有时间修改解析器,为什么不只是添加对该功能的支持?否则他们必须修改代码,添加测试用例(测试它不支持功能)等等。代码更改以识别新语法不仅仅是神奇地发生。

答案 1 :(得分:3)

GCC 4.4.0是released April 23, 2009。基于范围的for循环的措辞是finalized July 16, 2009。我不知道任何具有预知能力的编译器编写者。