C++ C++;11功能std::map::at在旧版本的C+上编译+;

C++ C++;11功能std::map::at在旧版本的C+上编译+;,c++,c++11,cmake,g++,c++03,C++,C++11,Cmake,G++,C++03,下面的代码使用了c++11中引入的std::map::at,但是,尽管在g++和cmake中指定了一个较旧的版本(我尝试了-std=c++03、-std=c++0x和-std=c++98),它仍然会被编译。其他c++11功能不起作用,例如基于范围的for循环 #include <iostream> #include <map> int main() { std::map<int, int> my_map; my_map[0] = 1;

下面的代码使用了c++11中引入的
std::map::at
,但是,尽管在g++和cmake中指定了一个较旧的版本(我尝试了
-std=c++03
-std=c++0x
-std=c++98
),它仍然会被编译。其他c++11功能不起作用,例如基于范围的for循环

#include <iostream>
#include <map>

int main() {
    std::map<int, int> my_map;
    my_map[0] = 1;
    std::cout << my_map.at(0);
    return 0;
}
CMakeLists.txt:

cmake_minimum_required(VERSION 2.6)
project(test)

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03")
add_executable(main main.cpp)
两种情况下的输出:

1

这里可能有什么问题?提前感谢。

库可能已经忘记了
#ifdef
处的内容。(或作为扩展提供)。@Yksisarvinen g++和gcc都是(Ubuntu 7.4.0-1ubuntu1~18.04.1)7.4.0我在godbolt上测试的所有内容也都没有错误
-学究式的
没有帮助这真的是个问题吗?我的意思是,如果它起作用,那么它就起作用了。如果您想确保可移植,那么无论如何您也应该使用不同的编译器进行编译。@LuisMachuca是的,我在VM上运行了它,谢谢
1