【发布时间】:2019-11-08 18:55:43
【问题描述】:
以下代码在编译为 C++ 98 时运行良好,但编译为 C++ 11 时失败。为什么?
#include <iostream>
#include <utility>
using namespace std;
int main()
{
int u = 1;
pair<int, int> p = make_pair<int, int>(0, u);
cout << p.first << " " << p.second << "\n";
}
来自 g++ (Debian 8.3.0-6) 8.3.0 的错误信息是:
foo.cpp: In function ‘int main()’:
foo.cpp:9:45: error: no matching function for call to ‘make_pair<int, int>(int, int&)’
pair<int, int> p = make_pair<int, int>(0, u);
^
我知道我可以简单地通过从make_pair 中删除模板说明符并让编译器自行决定类型来编译它。但我有兴趣了解从 C++ 98 到 C++ 11 的哪些变化导致此代码不再兼容。
【问题讨论】:
-
你编译时使用 -std=c++11 标志还是什么?
-
@Boki 我用
-std=c++11和-std=c++98测试过。