#include <iostream>
#include <type_traits>
using namespace std;
struct A
{
int f()&&
{
return 0;
}
};
template<typename T1, typename T2>
constexpr bool is_same_v = std::is_same<T1, T2>::value;
int main() {
auto ptr = &A::f();
std::cout<<is_same_v<decltype(ptr), int()> <<" "
<<is_same_v<decltype(ptr), int(&A::*)()>;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEEKewoJaW50IGYoKSYmCgl7CgkJcmV0dXJuIDA7Cgl9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CmNvbnN0ZXhwciBib29sIGlzX3NhbWVfdiA9IHN0ZDo6aXNfc2FtZTxUMSwgVDI+Ojp2YWx1ZTsKCmludCBtYWluKCkgewoJYXV0byBwdHIgPSAmQTo6ZigpOwoJc3RkOjpjb3V0PDxpc19zYW1lX3Y8ZGVjbHR5cGUocHRyKSwgaW50KCk+IDw8IiAiCgkgICAgICAgICA8PGlzX3NhbWVfdjxkZWNsdHlwZShwdHIpLCBpbnQoJkE6OiopKCk+OwoJcmV0dXJuIDA7Cn0=
prog.cpp: In function ‘int main()’:
prog.cpp:18:19: error: cannot call member function ‘int A::f() &&’ without object
auto ptr = &A::f();
^
prog.cpp:19:13: error: template argument 1 is invalid
std::cout<<is_same_v<decltype(ptr), int()> <<" "
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cpp:20:49: error: cannot declare pointer to ‘int (&)()’
<<is_same_v<decltype(ptr), int(&A::*)()>;
^
prog.cpp:20:13: error: template argument 1 is invalid
<<is_same_v<decltype(ptr), int(&A::*)()>;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~