| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | /* *  Created by Jozef on 02/12/2018. *  Copyright 2018 Two Blue Cubes Ltd. All rights reserved. * *  Distributed under the Boost Software License, Version 1.0. (See accompanying *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */#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    // std::result_of is deprecated in C++17 and removed in C++20. Hence, it is    // replaced with std::invoke_result here.    template <typename Func, typename... U>    using FunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U...>>>;#else    // Keep ::type here because we still support C++11    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 Catchnamespace mpl_{    struct na;}#endif // TWOBLUECUBES_CATCH_META_HPP_INCLUDED
 |