1 /* 2 Copyright (c) 2016 Modified Work Barrett Adair 3 4 Distributed under the Boost Software License, Version 1.0. 5 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) 6 7 HEADER GUARDS INTENTIONALLY OMITTED 8 DO NOT INCLUDE THIS HEADER DIRECTLY 9 10 macros used: 11 12 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for 13 the current include (`transaction_safe` or nothing) 14 15 BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`, 16 tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe` 17 18 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when 19 BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing 20 21 BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for 22 the current include (`noexcept` or nothing) 23 24 BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`, 25 tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept` 26 27 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if 28 BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing 29 */ 30 31 template<typename Return, typename... Args> 32 struct function<BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...) 33 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE 34 BOOST_CLBL_TRTS_NOEXCEPT_SPEC> 35 : default_callable_traits<> { 36 37 static constexpr bool value = true; 38 39 using has_varargs = std::true_type; 40 41 using traits = function; 42 43 using return_type = Return; 44 45 using arg_types = std::tuple<Args...>; 46 using non_invoke_arg_types = arg_types; 47 48 using type = 49 BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...) 50 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE 51 BOOST_CLBL_TRTS_NOEXCEPT_SPEC; 52 53 using function_type = Return(Args..., ...); 54 55 using qualified_function_type = function_type; 56 57 using remove_varargs = 58 BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args...) 59 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE; 60 61 using add_varargs = type; 62 63 using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT; 64 65 using remove_noexcept = BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args..., ...) 66 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE; 67 68 using add_noexcept = BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args..., ...) 69 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE 70 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER; 71 72 using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE; 73 74 using remove_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...) 75 BOOST_CLBL_TRTS_NOEXCEPT_SPEC; 76 77 using add_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...) 78 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER 79 BOOST_CLBL_TRTS_NOEXCEPT_SPEC; 80 81 template<typename U> 82 using apply_member_pointer = 83 BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_VARARGS_CC U::*)(Args..., ...) 84 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE 85 BOOST_CLBL_TRTS_NOEXCEPT_SPEC; 86 87 template<typename NewReturn> 88 using apply_return = 89 BOOST_CLBL_TRTS_ST NewReturn(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...) 90 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE 91 BOOST_CLBL_TRTS_NOEXCEPT_SPEC; 92 93 template<template<class...> class Container> 94 using expand_args = Container<Args...>; 95 96 using is_member_pointer = std::false_type; 97 }; 98 99