From 1367d827d54c0c2328ed9fe9a4836e9818678e9e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 21 Apr 2025 19:24:24 +0200 Subject: [PATCH] Add support for C++17 noexcept as part of function type --- include/turtle/detail/signature.hpp | 49 +++++++++++++++++------------ 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/include/turtle/detail/signature.hpp b/include/turtle/detail/signature.hpp index cb4b3eb..d931427 100644 --- a/include/turtle/detail/signature.hpp +++ b/include/turtle/detail/signature.hpp @@ -1,6 +1,7 @@ // http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2012 +// Copyright 2020-2025 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -10,36 +11,44 @@ #define MOCK_SIGNATURE_HPP_INCLUDED #include "../config.hpp" +#include #include namespace mock { namespace detail { -#define MOCK_NOARG -#define MOCK_STRIP_FUNCTION_QUALIFIERS(cv, ref) \ - template \ - struct strip_function_qualifiers \ - { \ - using type = R(Args...); \ - }; \ - template \ - struct strip_function_qualifiers \ - { \ - using type = R(Args..., ...); \ +#define MOCK_STRIP_FUNCTION_QUALIFIERS(ne, cv, ref) \ + template \ + struct strip_function_qualifiers \ + { \ + using type = R(Args...); \ + }; \ + template \ + struct strip_function_qualifiers \ + { \ + using type = R(Args..., ...); \ }; -#define MOCK_STRIP_FUNCTION_QUALIFIERS_REF(cv) \ - MOCK_STRIP_FUNCTION_QUALIFIERS(cv, ) \ - MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &) \ - MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &&) +#define MOCK_STRIP_FUNCTION_QUALIFIERS_REF(ne, cv) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(ne, cv, ) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(ne, cv, &) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(ne, cv, &&) +#define MOCK_STRIP_FUNCTION_QUALIFIERS_CV_REF(except_spec) \ + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(except_spec, BOOST_PP_EMPTY()) \ + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(except_spec, const) \ + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(except_spec, volatile) \ + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(except_spec, const volatile) template struct strip_function_qualifiers; - MOCK_STRIP_FUNCTION_QUALIFIERS_REF(MOCK_NOARG) - MOCK_STRIP_FUNCTION_QUALIFIERS_REF(const) - MOCK_STRIP_FUNCTION_QUALIFIERS_REF(volatile) - MOCK_STRIP_FUNCTION_QUALIFIERS_REF(const volatile) -#undef MOCK_NOARG + MOCK_STRIP_FUNCTION_QUALIFIERS_CV_REF(BOOST_PP_EMPTY()) + + // C++17 includes noexcept in the function type +#if MOCK_CXX_VERSION >= 201703L + MOCK_STRIP_FUNCTION_QUALIFIERS_CV_REF(noexcept) +#endif + #undef MOCK_STRIP_FUNCTION_QUALIFIERS #undef MOCK_STRIP_FUNCTION_QUALIFIERS_REF +#undef MOCK_STRIP_FUNCTION_QUALIFIERS_CV_REF template struct signature;