forked from OSchip/llvm-project
[libcxx] [test] Use dedicated types for the invocable concept tests for multiple overloads
This should be clearer, instead of relying on rules for implicit conversions regarding built in float/integer types. Differential Revision: https://reviews.llvm.org/D99928
This commit is contained in:
parent
3ae03f67fe
commit
91d6debbb9
|
@ -222,21 +222,30 @@ static_assert(!std::invocable<rvalue_cv_function_object volatile&, int*>);
|
|||
static_assert(!std::invocable<rvalue_cv_function_object const volatile&, int*>);
|
||||
|
||||
struct multiple_overloads {
|
||||
bool operator()();
|
||||
void operator()(int);
|
||||
int operator()(double);
|
||||
struct A {};
|
||||
struct B { B(int); };
|
||||
struct AB : A, B {};
|
||||
struct O {};
|
||||
struct DA : A {};
|
||||
struct DB : B {};
|
||||
void operator()(A) {};
|
||||
void operator()(B) {};
|
||||
};
|
||||
static_assert(std::invocable<multiple_overloads&>);
|
||||
static_assert(std::invocable<multiple_overloads&, short>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::A>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::B>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::DA>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::DB>);
|
||||
static_assert(std::invocable<multiple_overloads&, int>);
|
||||
static_assert(!std::invocable<multiple_overloads&, long long>);
|
||||
static_assert(std::invocable<multiple_overloads&, double>);
|
||||
static_assert(std::invocable<multiple_overloads&, float>);
|
||||
static_assert(std::invocable<multiple_overloads&, short&>);
|
||||
static_assert(!std::invocable<multiple_overloads&, multiple_overloads::AB>);
|
||||
static_assert(!std::invocable<multiple_overloads&, multiple_overloads::O>);
|
||||
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::A&>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::B&>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::DA&>);
|
||||
static_assert(std::invocable<multiple_overloads&, multiple_overloads::DB&>);
|
||||
static_assert(std::invocable<multiple_overloads&, int&>);
|
||||
static_assert(!std::invocable<multiple_overloads&, long long>);
|
||||
static_assert(std::invocable<multiple_overloads&, float&>);
|
||||
static_assert(std::invocable<multiple_overloads&, double&>);
|
||||
static_assert(!std::invocable<multiple_overloads&, multiple_overloads::AB&>);
|
||||
static_assert(!std::invocable<multiple_overloads&, multiple_overloads::O&>);
|
||||
} // namespace function_objects
|
||||
|
||||
namespace pointer_to_member_functions {
|
||||
|
|
|
@ -248,21 +248,30 @@ static_assert(
|
|||
!std::regular_invocable<rvalue_cv_function_object const volatile&, int*>);
|
||||
|
||||
struct multiple_overloads {
|
||||
bool operator()();
|
||||
void operator()(int);
|
||||
int operator()(double);
|
||||
struct A {};
|
||||
struct B { B(int); };
|
||||
struct AB : A, B {};
|
||||
struct O {};
|
||||
struct DA : A {};
|
||||
struct DB : B {};
|
||||
void operator()(A) {};
|
||||
void operator()(B) {};
|
||||
};
|
||||
static_assert(std::regular_invocable<multiple_overloads&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, short>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::A>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::B>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::DA>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::DB>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, int>);
|
||||
static_assert(!std::regular_invocable<multiple_overloads&, long long>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, double>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, float>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, short&>);
|
||||
static_assert(!std::regular_invocable<multiple_overloads&, multiple_overloads::AB>);
|
||||
static_assert(!std::regular_invocable<multiple_overloads&, multiple_overloads::O>);
|
||||
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::A&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::B&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::DA&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, multiple_overloads::DB&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, int&>);
|
||||
static_assert(!std::regular_invocable<multiple_overloads&, long long&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, float&>);
|
||||
static_assert(std::regular_invocable<multiple_overloads&, double&>);
|
||||
static_assert(!std::regular_invocable<multiple_overloads&, multiple_overloads::AB&>);
|
||||
static_assert(!std::regular_invocable<multiple_overloads&, multiple_overloads::O&>);
|
||||
} // namespace function_objects
|
||||
|
||||
namespace pointer_to_member_functions {
|
||||
|
|
Loading…
Reference in New Issue