]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/coroutine/detail/setup.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / coroutine / detail / setup.hpp
1
2 // Copyright Oliver Kowalke 2009.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6
7 #ifndef BOOST_COROUTINES_DETAIL_SETUP_H
8 #define BOOST_COROUTINES_DETAIL_SETUP_H
9
10 #include <boost/assert.hpp>
11 #include <boost/config.hpp>
12 #include <boost/move/move.hpp>
13 #include <boost/type_traits/decay.hpp>
14 #include <boost/type_traits/is_convertible.hpp>
15 #include <boost/type_traits/is_same.hpp>
16
17 #include <boost/coroutine/attributes.hpp>
18 #include <boost/coroutine/detail/coroutine_context.hpp>
19 #include <boost/coroutine/detail/flags.hpp>
20
21 #ifdef BOOST_HAS_ABI_HEADERS
22 # include BOOST_ABI_PREFIX
23 #endif
24
25 namespace boost {
26 namespace coroutines {
27 namespace detail {
28
29 template< typename Fn >
30 struct setup
31 {
32 struct dummy {};
33
34 Fn fn;
35 coroutine_context * caller;
36 coroutine_context * callee;
37 attributes attr;
38
39 #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
40 setup( Fn fn_,
41 coroutine_context * caller_,
42 coroutine_context * callee_,
43 attributes const& attr_) :
44 fn( boost::forward< Fn >( fn_) ),
45 caller( caller_),
46 callee( callee_),
47 attr( attr_)
48 {}
49 #endif
50 setup( BOOST_RV_REF( Fn) fn_,
51 coroutine_context * caller_,
52 coroutine_context * callee_,
53 attributes const& attr_,
54 typename disable_if<
55 is_same< typename decay< Fn >::type, setup >,
56 dummy*
57 >::type = 0) :
58 #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
59 fn( fn_),
60 #else
61 fn( boost::forward< Fn >( fn_) ),
62 #endif
63 caller( caller_),
64 callee( callee_),
65 attr( attr_)
66 {}
67 };
68
69 }}}
70
71 #ifdef BOOST_HAS_ABI_HEADERS
72 # include BOOST_ABI_SUFFIX
73 #endif
74
75 #endif // BOOST_COROUTINES_DETAIL_SETUP_H