考虑这段代码:
#include <iostream>
void f(int&& i)
{
std::cout << "f(int&&)\n";
}
void f(const int&& i)
{
std::cout << "f(const int&&)\n";
}
int fun_i()
{
return 0;
}
const int fun_ci()
{
return 0;
}
int main()
{
f(fun_i());
f(fun_ci());
}
如果我用 MSVC 2012 编译它,输出是:
f(int&&)
f(const int&&)
如果我用 GCC 4.7 编译,输出是:
f(int&&)
f(int&&)
哪个是对的?
(如果我删除 f 的第二个定义,程序将无法在 MSVC 2012 下编译,但在 GCC 4.7 下会编译。)