New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
result_of.hpp in vendors/XIOS/current/extern/boost/include/boost/utility – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/utility/result_of.hpp @ 3408

Last change on this file since 3408 was 3408, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

  • Property svn:keywords set to Id
File size: 2.7 KB
Line 
1// Boost result_of library
2
3//  Copyright Douglas Gregor 2004. Use, modification and
4//  distribution is subject to the Boost Software License, Version
5//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
6//  http://www.boost.org/LICENSE_1_0.txt)
7
8// For more information, see http://www.boost.org/libs/utility
9#ifndef BOOST_RESULT_OF_HPP
10#define BOOST_RESULT_OF_HPP
11
12#include <boost/config.hpp>
13#include <boost/preprocessor/iteration/iterate.hpp>
14#include <boost/preprocessor/punctuation/comma_if.hpp>
15#include <boost/preprocessor/repetition/enum_params.hpp>
16#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
17#include <boost/detail/workaround.hpp>
18#include <boost/mpl/has_xxx.hpp>
19#include <boost/mpl/if.hpp>
20#include <boost/mpl/bool.hpp>
21#include <boost/mpl/or.hpp>
22#include <boost/type_traits/is_pointer.hpp>
23#include <boost/type_traits/is_member_function_pointer.hpp>
24#include <boost/type_traits/remove_cv.hpp>
25
26#ifndef BOOST_RESULT_OF_NUM_ARGS
27#  define BOOST_RESULT_OF_NUM_ARGS 10
28#endif
29
30namespace boost {
31
32template<typename F> struct result_of;
33template<typename F> struct tr1_result_of; // a TR1-style implementation of result_of
34
35#if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
36namespace detail {
37
38BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type)
39
40template<typename F, typename FArgs, bool HasResultType> struct tr1_result_of_impl;
41template<typename F> struct cpp0x_result_of_impl;
42
43template<typename F>
44struct result_of_void_impl
45{
46  typedef void type;
47};
48
49template<typename R>
50struct result_of_void_impl<R (*)(void)>
51{
52  typedef R type;
53};
54
55template<typename R>
56struct result_of_void_impl<R (&)(void)>
57{
58  typedef R type;
59};
60
61// Determine the return type of a function pointer or pointer to member.
62template<typename F, typename FArgs>
63struct result_of_pointer
64  : tr1_result_of_impl<typename remove_cv<F>::type, FArgs, false> { };
65
66template<typename F, typename FArgs>
67struct tr1_result_of_impl<F, FArgs, true>
68{
69  typedef typename F::result_type type;
70};
71
72template<typename FArgs>
73struct is_function_with_no_args : mpl::false_ {};
74
75template<typename F>
76struct is_function_with_no_args<F(void)> : mpl::true_ {};
77
78template<typename F, typename FArgs>
79struct result_of_nested_result : F::template result<FArgs>
80{};
81
82template<typename F, typename FArgs>
83struct tr1_result_of_impl<F, FArgs, false>
84  : mpl::if_<is_function_with_no_args<FArgs>,
85             result_of_void_impl<F>,
86             result_of_nested_result<F, FArgs> >::type
87{};
88
89} // end namespace detail
90
91#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,BOOST_RESULT_OF_NUM_ARGS,<boost/utility/detail/result_of_iterate.hpp>))
92#include BOOST_PP_ITERATE()
93
94#else
95#  define BOOST_NO_RESULT_OF 1
96#endif
97
98}
99
100#endif // BOOST_RESULT_OF_HPP
Note: See TracBrowser for help on using the repository browser.