diff options
Diffstat (limited to 'asl/base/functional_tests.cpp')
-rw-r--r-- | asl/base/functional_tests.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/asl/base/functional_tests.cpp b/asl/base/functional_tests.cpp index 5e7b052..6332784 100644 --- a/asl/base/functional_tests.cpp +++ b/asl/base/functional_tests.cpp @@ -7,9 +7,12 @@ struct HasFunction { - void do_something(int, float) {} + void do_something(int, float) const {} + int& do_something2(int, float) &; }; +struct HasFunction2 : public HasFunction {}; + struct HasMember { int member{}; @@ -17,6 +20,8 @@ struct HasMember void (*member_fn)(){}; }; +struct HasMember2 : public HasMember {}; + struct Functor { int64_t operator()() { return 35; } @@ -34,7 +39,13 @@ static_assert(asl::same_as<asl::invoke_result_t<Functor>, int64_t>); static_assert(asl::same_as<asl::invoke_result_t<Functor, int>, int>); static_assert(asl::same_as<asl::invoke_result_t<decltype(static_cast<float(*)(float)>(some_func1)), float>, float>); static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasFunction::do_something), HasFunction, int, float>, void>); -static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasMember::member), const HasMember>, const int&>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasFunction::do_something), const HasFunction2&, int, float>, void>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasFunction::do_something), HasFunction*, int, float>, void>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasFunction::do_something2), HasFunction2&, int, float>, int&>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasFunction::do_something2), HasFunction*, int, float>, int&>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasMember::member), HasMember>, int&&>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasMember::member), const HasMember&>, const int&>); +static_assert(asl::same_as<asl::invoke_result_t<decltype(&HasMember::member), const HasMember2*>, const int&>); static_assert(asl::invocable<int()>); static_assert(!asl::invocable<int(), int>); @@ -45,8 +56,17 @@ static_assert(asl::invocable<Functor, int>); static_assert(!asl::invocable<Functor, void*>); static_assert(asl::invocable<decltype(static_cast<float(*)(float)>(some_func1)), float>); static_assert(asl::invocable<decltype(&HasFunction::do_something), HasFunction, int, float>); +static_assert(asl::invocable<decltype(&HasFunction::do_something), const HasFunction2&, int, float>); +static_assert(asl::invocable<decltype(&HasFunction::do_something), HasFunction*, int, float>); static_assert(!asl::invocable<decltype(&HasFunction::do_something), HasFunction, int, int*>); -static_assert(asl::invocable<decltype(&HasMember::member), const HasMember>); +static_assert(!asl::invocable<decltype(&HasFunction::do_something2), HasFunction, int, float>); +static_assert(!asl::invocable<decltype(&HasFunction::do_something2), const HasFunction2&, int, float>); +static_assert(asl::invocable<decltype(&HasFunction::do_something2), HasFunction2&, int, float>); +static_assert(asl::invocable<decltype(&HasFunction::do_something2), HasFunction*, int, float>); +static_assert(!asl::invocable<decltype(&HasFunction::do_something2), HasFunction, int, int*>); +static_assert(asl::invocable<decltype(&HasMember::member), const HasMember2>); +static_assert(asl::invocable<decltype(&HasMember::member), const HasMember&>); +static_assert(asl::invocable<decltype(&HasMember::member), const HasMember2*>); ASL_TEST(invoke_member_function) { |