【发布时间】:2013-07-23 01:20:39
【问题描述】:
我目前坚持使用 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 已经过时了,但考虑到编译器标志,它甚至不应该识别新结构吗?
【问题讨论】:
-
"要启用 C++0x 支持,请将命令行参数 -std=c++0x 添加到您的 g++ 命令行。或者,启用除 C++0x 扩展之外的 GNU 扩展,添加 -std=gnu++0x。GCC 4.7 及更高版本也支持 -std=c++11 和 -std=gnu++11。" C++0x/C++11 Support in GCC