1 // TR2 <type_traits> -*- C++ -*-
 
    3 // Copyright (C) 2011-2014 Free Software Foundation, Inc.
 
    5 // This file is part of the GNU ISO C++ Library.  This library is free
 
    6 // software; you can redistribute it and/or modify it under the
 
    7 // terms of the GNU General Public License as published by the
 
    8 // Free Software Foundation; either version 3, or (at your option)
 
   11 // This library is distributed in the hope that it will be useful,
 
   12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
   13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
   14 // GNU General Public License for more details.
 
   16 // Under Section 7 of GPL version 3, you are granted additional
 
   17 // permissions described in the GCC Runtime Library Exception, version
 
   18 // 3.1, as published by the Free Software Foundation.
 
   20 // You should have received a copy of the GNU General Public License and
 
   21 // a copy of the GCC Runtime Library Exception along with this program;
 
   22 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
   23 // <http://www.gnu.org/licenses/>.
 
   25 /** @file tr2/type_traits
 
   26  *  This is a TR2 C++ Library header.
 
   29 #ifndef _GLIBCXX_TR2_TYPE_TRAITS
 
   30 #define _GLIBCXX_TR2_TYPE_TRAITS 1
 
   32 #pragma GCC system_header
 
   33 #include <type_traits>
 
   34 #include <bits/c++config.h>
 
   36 namespace std _GLIBCXX_VISIBILITY(default)
 
   40 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   43    * @addtogroup metaprogramming
 
   48    *  See N2965: Type traits and base classes
 
   53    *  Simple typelist. Compile-time list of types.
 
   55   template<typename... _Elements>
 
   56     struct __reflection_typelist;
 
   58   /// Specialization for an empty typelist.
 
   60     struct __reflection_typelist<>
 
   62       typedef std::true_type                   empty;
 
   65   /// Partial specialization.
 
   66   template<typename _First, typename... _Rest>
 
   67     struct __reflection_typelist<_First, _Rest...>
 
   69       typedef std::false_type                  empty;
 
   78    typedef __reflection_typelist<_Rest...>         type;
 
   82   /// Sequence abstraction metafunctions for manipulating a typelist.
 
   86   /// Enumerate all the base classes of a class. Form of a typelist.
 
   87   template<typename _Tp>
 
   90       typedef __reflection_typelist<__bases(_Tp)...>       type;
 
   93   /// Enumerate all the direct base classes of a class. Form of a typelist.
 
   94   template<typename _Tp>
 
   97       typedef __reflection_typelist<__direct_bases(_Tp)...>    type;
 
  100   /// @} group metaprogramming
 
  102 _GLIBCXX_END_NAMESPACE_VERSION
 
  106 #endif // _GLIBCXX_TR2_TYPE_TRAITS