mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 23:36:11 +01:00
51 lines
1.6 KiB
C++
51 lines
1.6 KiB
C++
/*
|
|
* 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. Also *_t format is preferred over
|
|
// typename *::type format.
|
|
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 Catch
|
|
|
|
namespace mpl_{
|
|
struct na;
|
|
}
|
|
|
|
#endif // TWOBLUECUBES_CATCH_META_HPP_INCLUDED
|