【发布时间】:2017-02-27 00:31:42
【问题描述】:
#include <vector>
using namespace std;
vector<int> f()
{
return{};
}
// Update: Below is not compilable
void g(vector<int>)
{}
// Update: Below is the my initial intent.
/*
void g(const vector<int>&)
{}
*/
void g(vector<int>&&)
{}
int main()
{
auto v1 = f();
auto&& v2 = f();
g(forward<vector<int>>(v1));
g(forward<vector<int>>(v2));
}
C++11 是否保证g(forward<vector<int>>(v1)) 会调用f(vector<int>) 或f(const vector<int>&) 和g(forward<vector<int>>(v2)) 会调用f(vector<int>&&)?
【问题讨论】:
-
这不能在我的机器上编译。对 g() 的调用是模棱两可的。所以问题实际上应该是为什么会发生这种情况。
-
我强烈建议您恢复编辑,您的更改会使现有答案无效。或者也许在编辑中发布一个附录,而不更改原始代码
-
@M.M,按照您的建议更新了帖子。
-
最后一段也可以进行编辑(以及类型更改,您写了
f,您的意思是g)
标签: c++ c++11 auto perfect-forwarding type-deduction