众所周知,返回类型的函数调用是函数的rvlaue是左值.
如果结果类型是左值引用类型或对函数类型的右值引用,则函数调用是左值;如果结果类型是对象类型的右值引用,则为xvalue,否则为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
}
Run Code Online (Sandbox Code Playgroud)
该诊断消息有什么问题?
强调我的,[expr.ass]/1:
赋值运算符(
=)和复合赋值运算符都是从右到左分组.所有都需要一个 可修改的左值作为左操作数并返回一个左值操作数的左值...
[basic.lval]/6:
函数不能修改,但函数指针可以修改.
所以你可能有一个引用函数的左值,但它不是一个可修改的左值,不能用来修改函数.
诊断消息......留下了一些需要的东西.Clang 3.6说,
错误:非对象类型'int()'不可分配
哪个更清楚.