#include <iostream>
#include <type_traits>
template<typename R, typename T>
void test(R T::*) {
std::cout << std::is_member_function_pointer<R T::*>::value
<< '\t' << std::is_function<R>::value << std::endl;
}
int main() {
struct dummy {
void one() {}
void two() & {}
void three() && {}
};
std::cout << std::boolalpha;
test(&dummy::one);
test(&dummy::two);
test(&dummy::three);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVD4Kdm9pZCB0ZXN0KFIgVDo6KikgewogICBzdGQ6OmNvdXQgPDwgc3RkOjppc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcjxSIFQ6Oio+Ojp2YWx1ZQogICAgICAgICA8PCAnXHQnIDw8IHN0ZDo6aXNfZnVuY3Rpb248Uj46OnZhbHVlIDw8IHN0ZDo6ZW5kbDsKfQoKCmludCBtYWluKCkgewogICBzdHJ1Y3QgZHVtbXkgewogICAgICAKICAgICAgdm9pZCBvbmUoKSB7fQoKICAgICAgdm9pZCB0d28oKSAmIHt9CgogICAgICB2b2lkIHRocmVlKCkgJiYge30KICAgfTsKCiAgIHN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYTsKICAgdGVzdCgmZHVtbXk6Om9uZSk7CiAgIHRlc3QoJmR1bW15Ojp0d28pOwogICB0ZXN0KCZkdW1teTo6dGhyZWUpOwp9Cg==