libstdc++
tr2/type_traits
Go to the documentation of this file.
1
// TR2 <type_traits> -*- C++ -*-
2
3
// Copyright (C) 2011-2013 Free Software Foundation, Inc.
4
//
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)
9
// any later version.
10
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.
15
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.
19
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/>.
24
25
/** @file tr2/type_traits
26
* This is a TR2 C++ Library header.
27
*/
28
29
#ifndef _GLIBCXX_TR2_TYPE_TRAITS
30
#define _GLIBCXX_TR2_TYPE_TRAITS 1
31
32
#pragma GCC system_header
33
#include <
type_traits
>
34
#include <
bits/c++config.h
>
35
36
namespace
std _GLIBCXX_VISIBILITY(default)
37
{
38
namespace
tr2
39
{
40
_GLIBCXX_BEGIN_NAMESPACE_VERSION
41
42
/**
43
* @addtogroup metaprogramming
44
* @{
45
*/
46
47
/**
48
* See N2965: Type traits and base classes
49
* by Michael Spertus
50
*/
51
52
/**
53
* Simple typelist. Compile-time list of types.
54
*/
55
template
<
typename
... _Elements>
56
struct
__reflection_typelist
;
57
58
/// Specialization for an empty typelist.
59
template
<>
60
struct
__reflection_typelist
<>
61
{
62
typedef
std::true_type
empty
;
63
};
64
65
/// Partial specialization.
66
template
<
typename
_First,
typename
... _Rest>
67
struct
__reflection_typelist
<_First, _Rest...>
68
{
69
typedef
std::false_type
empty
;
70
71
struct
first
72
{
73
typedef
_First type;
74
};
75
76
struct
rest
77
{
78
typedef
__reflection_typelist
<_Rest...> type;
79
};
80
};
81
82
/// Sequence abstraction metafunctions for manipulating a typelist.
83
84
85
86
/// Enumerate all the base classes of a class. Form of a typelist.
87
template
<
typename
_Tp>
88
struct
bases
89
{
90
typedef
__reflection_typelist
<__bases(_Tp)...>
type
;
91
};
92
93
/// Enumerate all the direct base classes of a class. Form of a typelist.
94
template
<
typename
_Tp>
95
struct
direct_bases
96
{
97
typedef
__reflection_typelist
<__direct_bases(_Tp)...>
type
;
98
};
99
100
/// @} group metaprogramming
101
102
_GLIBCXX_END_NAMESPACE_VERSION
103
}
104
}
105
106
#endif // _GLIBCXX_TR2_TYPE_TRAITS
include
tr2
type_traits
Generated by
1.8.3.1