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)
7 #ifndef BOOST_COROUTINES_DETAIL_SETUP_H
8 #define BOOST_COROUTINES_DETAIL_SETUP_H
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>
17 #include <boost/coroutine/attributes.hpp>
18 #include <boost/coroutine/detail/coroutine_context.hpp>
19 #include <boost/coroutine/detail/flags.hpp>
21 #ifdef BOOST_HAS_ABI_HEADERS
22 # include BOOST_ABI_PREFIX
26 namespace coroutines {
29 template< typename Fn >
35 coroutine_context * caller;
36 coroutine_context * callee;
39 #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
41 coroutine_context * caller_,
42 coroutine_context * callee_,
43 attributes const& attr_) :
44 fn( boost::forward< Fn >( fn_) ),
50 setup( BOOST_RV_REF( Fn) fn_,
51 coroutine_context * caller_,
52 coroutine_context * callee_,
53 attributes const& attr_,
55 is_same< typename decay< Fn >::type, setup >,
58 #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
61 fn( boost::forward< Fn >( fn_) ),
71 #ifdef BOOST_HAS_ABI_HEADERS
72 # include BOOST_ABI_SUFFIX
75 #endif // BOOST_COROUTINES_DETAIL_SETUP_H