#include #include #include "test.hpp" template struct callable_rank : callable_rank {}; template<> struct callable_rank<0> {}; FIT_STATIC_TEST_CASE() { struct is_callable_class { void operator()(int) const { } }; struct callable_test_param {}; void is_callable_function(int) { } struct is_callable_rank_class { void operator()(int, callable_rank<3>) const { } void operator()(int, callable_rank<4>) const { } }; static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); typedef void (*is_callable_function_pointer)(int); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(fit::is_callable::value, "Not callable"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(fit::is_callable>::value, "Not callable"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(not fit::is_callable, callable_test_param>::value, "callable failed"); static_assert(not fit::is_callable, callable_test_param>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable>::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); static_assert(not fit::is_callable::value, "callable failed"); }; FIT_STATIC_TEST_CASE() { typedef int(callable_rank<0>::*fn)(int); static_assert(fit::is_callable&, int>::value, "Failed"); static_assert(fit::is_callable&, int>::value, "Failed"); static_assert(!fit::is_callable&>::value, "Failed"); static_assert(!fit::is_callable const&, int>::value, "Failed"); }; FIT_STATIC_TEST_CASE() { typedef int(callable_rank<0>::*fn)(int); typedef callable_rank<0>* T; typedef callable_rank<1>* DT; typedef const callable_rank<0>* CT; typedef std::unique_ptr> ST; static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(!fit::is_callable::value, "Failed"); }; FIT_STATIC_TEST_CASE() { typedef int(callable_rank<0>::*fn); static_assert(!fit::is_callable::value, "Failed"); }; FIT_STATIC_TEST_CASE() { typedef int(callable_rank<0>::*fn); static_assert(fit::is_callable&>::value, "Failed"); static_assert(fit::is_callable&&>::value, "Failed"); static_assert(fit::is_callable&>::value, "Failed"); static_assert(fit::is_callable&>::value, "Failed"); }; FIT_STATIC_TEST_CASE() { typedef int(callable_rank<0>::*fn); typedef callable_rank<0>* T; typedef callable_rank<1>* DT; typedef const callable_rank<0>* CT; typedef std::unique_ptr> ST; static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); static_assert(fit::is_callable::value, "Failed"); }; FIT_STATIC_TEST_CASE() { typedef void(*fp)(callable_rank<0>&, int); static_assert(fit::is_callable&, int>::value, "Failed"); static_assert(fit::is_callable&, int>::value, "Failed"); static_assert(!fit::is_callable&, int>::value, "Failed"); static_assert(!fit::is_callable::value, "Failed"); static_assert(!fit::is_callable&>::value, "Failed"); }; FIT_STATIC_TEST_CASE() { typedef void(&fp)(callable_rank<0>&, int); static_assert(fit::is_callable&, int>::value, "Failed"); static_assert(fit::is_callable&, int>::value, "Failed"); static_assert(!fit::is_callable&, int>::value, "Failed"); static_assert(!fit::is_callable::value, "Failed"); static_assert(!fit::is_callable&>::value, "Failed"); };