rvalue对函数类型的引用

St.*_*rio 0 c++ rvalue

众所周知,返回类型的函数调用是函数的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)

该诊断消息有什么问题?

Bri*_*ian 6

强调我的,[expr.ass]/1:

赋值运算符(=)和复合赋值运算符都是从右到左分组.所有都需要一个 可修改的左值作为左操作数并返回一个左值操作数的左值...

[basic.lval]/6:

函数不能修改,但函数指针可以修改.

所以你可能有一个引用函数的左值,但它不是一个可修改的左值,不能用来修改函数.

诊断消息......留下了一些需要的东西.Clang 3.6说,

错误:非对象类型'int()'不可分配

哪个更清楚.