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.
quote.hpp in vendors/XIOS/current/extern/boost/include/boost/mpl – NEMO

source: vendors/XIOS/current/extern/boost/include/boost/mpl/quote.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: 3.6 KB
Line 
1
2#if !defined(BOOST_PP_IS_ITERATING)
3
4///// header body
5
6#ifndef BOOST_MPL_QUOTE_HPP_INCLUDED
7#define BOOST_MPL_QUOTE_HPP_INCLUDED
8
9// Copyright Aleksey Gurtovoy 2000-2008
10//
11// Distributed under the Boost Software License, Version 1.0.
12// (See accompanying file LICENSE_1_0.txt or copy at
13// http://www.boost.org/LICENSE_1_0.txt)
14//
15// See http://www.boost.org/libs/mpl for documentation.
16
17// $Id$
18// $Date: 2008-10-11 02:50:46 -0400 (Sat, 11 Oct 2008) $
19// $Revision: 49272 $
20
21#if !defined(BOOST_MPL_PREPROCESSING_MODE)
22#   include <boost/mpl/void.hpp>
23#   include <boost/mpl/aux_/has_type.hpp>
24#endif
25
26#include <boost/mpl/aux_/config/bcc.hpp>
27#include <boost/mpl/aux_/config/ttp.hpp>
28
29#if defined(BOOST_MPL_CFG_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
30    && !defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)
31#   define BOOST_MPL_CFG_NO_QUOTE_TEMPLATE
32#endif
33
34#if !defined(BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS) \
35    && defined(BOOST_MPL_CFG_NO_HAS_XXX)
36#   define BOOST_MPL_CFG_NO_IMPLICIT_METAFUNCTIONS
37#endif
38
39#include <boost/mpl/aux_/config/use_preprocessed.hpp>
40
41#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
42 && !defined(BOOST_MPL_PREPROCESSING_MODE)
43
44#   define BOOST_MPL_PREPROCESSED_HEADER quote.hpp
45#   include <boost/mpl/aux_/include_preprocessed.hpp>
46
47#else
48
49#   include <boost/mpl/limits/arity.hpp>
50#   include <boost/mpl/aux_/preprocessor/params.hpp>
51#   include <boost/mpl/aux_/config/ctps.hpp>
52#   include <boost/mpl/aux_/config/workaround.hpp>
53
54#   include <boost/preprocessor/iterate.hpp>
55#   include <boost/preprocessor/cat.hpp>
56
57#if !defined(BOOST_MPL_CFG_NO_QUOTE_TEMPLATE)
58
59namespace boost { namespace mpl {
60
61#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
62
63template< typename T, bool has_type_ >
64struct quote_impl
65// GCC has a problem with metafunction forwarding when T is a
66// specialization of a template called 'type'.
67# if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) \
68    && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(0)) \
69    && BOOST_WORKAROUND(__GNUC_PATCHLEVEL__, BOOST_TESTED_AT(2))
70{
71    typedef typename T::type type;
72};
73# else
74    : T
75{
76};
77# endif
78
79template< typename T >
80struct quote_impl<T,false>
81{
82    typedef T type;
83};
84
85#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
86
87template< bool > struct quote_impl
88{
89    template< typename T > struct result_
90        : T
91    {
92    };
93};
94
95template<> struct quote_impl<false>
96{
97    template< typename T > struct result_
98    {
99        typedef T type;
100    };
101};
102
103#endif
104
105#define BOOST_PP_ITERATION_PARAMS_1 \
106    (3,(1, BOOST_MPL_LIMIT_METAFUNCTION_ARITY, <boost/mpl/quote.hpp>))
107#include BOOST_PP_ITERATE()
108
109}}
110
111#endif // BOOST_MPL_CFG_NO_QUOTE_TEMPLATE
112
113#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
114#endif // BOOST_MPL_QUOTE_HPP_INCLUDED
115
116///// iteration
117
118#else
119#define i_ BOOST_PP_FRAME_ITERATION(1)
120
121template<
122      template< BOOST_MPL_PP_PARAMS(i_, typename P) > class F
123    , typename Tag = void_
124    >
125struct BOOST_PP_CAT(quote,i_)
126{
127    template< BOOST_MPL_PP_PARAMS(i_, typename U) > struct apply
128#if defined(BOOST_MPL_CFG_BCC590_WORKAROUNDS)
129    {
130        typedef typename quote_impl<
131              F< BOOST_MPL_PP_PARAMS(i_, U) >
132            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value
133            >::type type;
134    };
135#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
136        : quote_impl<
137              F< BOOST_MPL_PP_PARAMS(i_, U) >
138            , aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value
139            >
140    {
141    };
142#else
143        : quote_impl< aux::has_type< F< BOOST_MPL_PP_PARAMS(i_, U) > >::value >
144            ::template result_< F< BOOST_MPL_PP_PARAMS(i_, U) > >
145    {
146    };
147#endif
148};
149
150#undef i_
151#endif // BOOST_PP_IS_ITERATING
Note: See TracBrowser for help on using the repository browser.