2 Copyright (c) 2016 Modified Work Barrett Adair
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)
7 HEADER GUARDS INTENTIONALLY OMITTED
8 DO NOT INCLUDE THIS HEADER DIRECTLY
12 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
13 the current include (`transaction_safe` or nothing)
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`
18 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
19 BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
21 BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
22 the current include (`noexcept` or nothing)
24 BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
25 tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
27 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
28 BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
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<> {
37 static constexpr bool value = true;
39 using has_varargs = std::true_type;
41 using traits = function;
43 using return_type = Return;
45 using arg_types = std::tuple<Args...>;
46 using non_invoke_arg_types = arg_types;
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;
53 using function_type = Return(Args..., ...);
55 using qualified_function_type = function_type;
57 using remove_varargs =
58 BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args...)
59 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
61 using add_varargs = type;
63 using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
65 using remove_noexcept = BOOST_CLBL_TRTS_ST Return(BOOST_CLBL_TRTS_CC *)(Args..., ...)
66 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
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;
72 using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
74 using remove_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC *)(Args..., ...)
75 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
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;
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;
87 template<typename NewReturn>
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;
93 template<template<class...> class Container>
94 using expand_args = Container<Args...>;
96 using is_member_pointer = std::false_type;