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

source: vendors/XIOS/current/extern/boost/include/boost/type_traits/is_polymorphic.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.8 KB
Line 
1//  (C) Copyright John Maddock 2000.
2//  Use, modification and distribution are subject to the Boost Software License,
3//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4//  http://www.boost.org/LICENSE_1_0.txt).
5//
6//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
7
8#ifndef BOOST_TT_IS_POLYMORPHIC_HPP
9#define BOOST_TT_IS_POLYMORPHIC_HPP
10
11#include <boost/type_traits/intrinsics.hpp>
12#ifndef BOOST_IS_POLYMORPHIC
13#include <boost/type_traits/is_class.hpp>
14#include <boost/type_traits/remove_cv.hpp>
15#endif
16// should be the last #include
17#include <boost/type_traits/detail/bool_trait_def.hpp>
18#include <boost/detail/workaround.hpp>
19
20namespace boost{
21
22#ifndef BOOST_IS_POLYMORPHIC
23
24namespace detail{
25
26template <class T>
27struct is_polymorphic_imp1
28{
29# if BOOST_WORKAROUND(__MWERKS__, <= 0x2407) // CWPro7 should return false always.
30    typedef char d1, (&d2)[2];
31# else
32   typedef typename remove_cv<T>::type ncvT;
33   struct d1 : public ncvT
34   {
35      d1();
36#  if !defined(__GNUC__) // this raises warnings with some classes, and buys nothing with GCC
37      ~d1()throw();
38#  endif
39      char padding[256];
40   private:
41      // keep some picky compilers happy:
42      d1(const d1&);
43      d1& operator=(const d1&);
44   };
45   struct d2 : public ncvT
46   {
47      d2();
48      virtual ~d2()throw();
49#  if !defined(BOOST_MSVC) && !defined(__ICL)
50      // for some reason this messes up VC++ when T has virtual bases,
51      // probably likewise for compilers that use the same ABI:
52      struct unique{};
53      virtual void unique_name_to_boost5487629(unique*);
54#  endif
55      char padding[256];
56   private:
57      // keep some picky compilers happy:
58      d2(const d2&);
59      d2& operator=(const d2&);
60   };
61# endif
62   BOOST_STATIC_CONSTANT(bool, value = (sizeof(d2) == sizeof(d1)));
63};
64
65template <class T>
66struct is_polymorphic_imp2
67{
68   BOOST_STATIC_CONSTANT(bool, value = false);
69};
70
71template <bool is_class>
72struct is_polymorphic_selector
73{
74   template <class T>
75   struct rebind
76   {
77      typedef is_polymorphic_imp2<T> type;
78   };
79};
80
81template <>
82struct is_polymorphic_selector<true>
83{
84   template <class T>
85   struct rebind
86   {
87      typedef is_polymorphic_imp1<T> type;
88   };
89};
90
91template <class T>
92struct is_polymorphic_imp
93{
94   typedef is_polymorphic_selector< ::boost::is_class<T>::value> selector;
95   typedef typename selector::template rebind<T> binder;
96   typedef typename binder::type imp_type;
97   BOOST_STATIC_CONSTANT(bool, value = imp_type::value);
98};
99
100} // namespace detail
101
102BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,::boost::detail::is_polymorphic_imp<T>::value)
103
104#else // BOOST_IS_POLYMORPHIC
105
106BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_polymorphic,T,BOOST_IS_POLYMORPHIC(T))
107
108#endif
109
110} // namespace boost
111
112#include <boost/type_traits/detail/bool_trait_undef.hpp>
113
114#endif
Note: See TracBrowser for help on using the repository browser.