众所周知,返回类型的函数调用是函数的rvlaue是左值。
如果结果类型是左值引用,则函数调用是左值 对函数类型的类型或右值引用,如果是结果则为xvalue type是对象类型的右值引用,否则是prvalue。
#include <iostream>
int a(){ return 1; }
int foo(){ return 1; }
int (&&bar())(){ return a; }
int main()
{
bar() = foo; //error: cannot convert 'int()' to 'int()' in assignment
}
该诊断消息有什么问题?
答案 0 :(得分:6)
强调我的,[expr.ass] / 1:
赋值运算符(
=
)和复合赋值运算符从右到左分组。都需要一个 可修改左值作为左操作数并返回左值操作数的左值...
[basic.lval] / 6:
无法修改函数,但可以修改指向函数的指针。
所以你可能有一个引用函数的左值,但它不是可修改的左值,并且不能用于修改函数。
诊断信息......留下了一些需要的东西。 Clang 3.6说,
错误:非对象类型&#39; int()&#39;不可分配
更清楚。