std::vector<bool>::emplace_back
自 C++14 才可用。然而,使用我的 g++ 5.4.0 编译时,即使我指定 -std=c++11
,它也可以编译通过。
当我使用 g++ 4.8.4 编译相同的代码时,它会失败。有没有办法说服 g++ 严格检查所选的标准?
注意:我已经使用了 -pedantic -Wextra -Wall
。
示例 test.cpp
:
#include <vector>
int main()
{
std::vector<bool> v;
v.emplace_back(true);
return 0;
}
使用g++ -std=c++11 test.cpp -o test
进行编译。在g++ 5.4.0上编译正常,在g++ 4.8.4上会出现错误:
test.cpp: In function ‘int main()’:
test.cpp:6:7: error: ‘class std::vector<bool>’ has no member named ‘emplace_back’
v.emplace_back(true);
^
vector<bool>::emplace_back
的缺失并不是符合标准的实现的限制,而是符合标准的程序的限制。实现可以根据需要在标准类中定义其他成员。 - n. m.emplace_back()
。对于更新的版本,如果您不想使用C++14库功能,请勿编写使用它们的代码。 - Shawn