1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #ifndef TWOBLUECUBES_CATCH_META_HPP_INCLUDED
- #define TWOBLUECUBES_CATCH_META_HPP_INCLUDED
- #include <type_traits>
- namespace Catch {
- template<typename T>
- struct always_false : std::false_type {};
- template <typename> struct true_given : std::true_type {};
- struct is_callable_tester {
- template <typename Fun, typename... Args>
- true_given<decltype(std::declval<Fun>()(std::declval<Args>()...))> static test(int);
- template <typename...>
- std::false_type static test(...);
- };
- template <typename T>
- struct is_callable;
- template <typename Fun, typename... Args>
- struct is_callable<Fun(Args...)> : decltype(is_callable_tester::test<Fun, Args...>(0)) {};
- #if defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703
-
-
- template <typename Func, typename... U>
- using FunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U...>>>;
- #else
-
- template <typename Func, typename... U>
- using FunctionReturnType = typename std::remove_reference<typename std::remove_cv<typename std::result_of<Func(U...)>::type>::type>::type;
- #endif
- }
- namespace mpl_{
- struct na;
- }
- #endif
|