使用-> *调用成员函数只会使测试失败

时间:2018-07-12 15:36:00

标签: c++ operators noexcept

我试图使用以下代码来测试使用操作符->*指向类的指针上的成员函数是否正常

// test.cc
#include <type_traits>
template <class T> auto declval() noexcept -> std::add_rvalue_reference_t<T>;
template <class T, class P, class ...Args> constexpr const static inline bool __is_nothrow_pointer_to_function_member_accessable_v = noexcept( (declval<T>()->*declval<P>())(declval<Args>()...) );

struct A {
    int i;
    int F() { return 0; }
    int F(int) noexcept { return 0; }
    int F(bool) & noexcept { return 0; }
    int F(bool) && { return 1; }
};

int main() {
 static_assert(__is_nothrow_pointer_to_function_member_accessable_v<A*, int (A::*)(int), int>);
    static_assert(__is_nothrow_pointer_to_function_member_accessable_v<A*, int (A::*)(bool) &, bool>);
}

我使用命令clang++-5.0 -std=c++17 test.cc对其进行了编译,并且2个静态断言均失败。

0 个答案:

没有答案