1 // Copyright David Abrahams 2002. 2 // Distributed under the Boost Software License, Version 1.0. (See 3 // accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 #ifndef RETURN_INTERNAL_REFERENCE_DWA2002131_HPP 6 # define RETURN_INTERNAL_REFERENCE_DWA2002131_HPP 7 8 # include <boost/python/detail/prefix.hpp> 9 10 # include <boost/python/default_call_policies.hpp> 11 # include <boost/python/reference_existing_object.hpp> 12 # include <boost/python/with_custodian_and_ward.hpp> 13 # include <boost/mpl/if.hpp> 14 15 namespace boost { namespace python { 16 17 namespace detail 18 { 19 template <std::size_t> 20 struct return_internal_reference_owner_arg_must_be_greater_than_zero 21 # if defined(__GNUC__) || defined(__EDG__) 22 {} 23 # endif 24 ; 25 } 26 27 template <std::size_t owner_arg = 1, class BasePolicy_ = default_call_policies> 28 struct return_internal_reference 29 : with_custodian_and_ward_postcall<0, owner_arg, BasePolicy_> 30 { 31 private: 32 BOOST_STATIC_CONSTANT(bool, legal = owner_arg > 0); 33 public: 34 typedef typename mpl::if_c< 35 legal 36 , reference_existing_object 37 , detail::return_internal_reference_owner_arg_must_be_greater_than_zero<owner_arg> 38 >::type result_converter; 39 }; 40 41 }} // namespace boost::python 42 43 #endif // RETURN_INTERNAL_REFERENCE_DWA2002131_HPP 44