• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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