libstdc++
tr2/type_traits
Go to the documentation of this file.
1
// TR2 <type_traits> -*- C++ -*-
2
3
// Copyright (C) 2011-2026 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
#ifdef _GLIBCXX_SYSHDR
33
#pragma GCC system_header
34
#endif
35
#include <
type_traits
>
36
#include <
bits/c++config.h
>
37
38
namespace
std
_GLIBCXX_VISIBILITY(default)
39
{
40
_GLIBCXX_BEGIN_NAMESPACE_VERSION
41
42
namespace
tr2
43
{
44
/**
45
* @addtogroup metaprogramming
46
* @{
47
*/
48
49
/**
50
* See N2965: Type traits and base classes
51
* by Michael Spertus
52
*/
53
54
/**
55
* Simple typelist. Compile-time list of types.
56
*/
57
template
<
typename
... _Elements>
58
struct
__reflection_typelist
;
59
60
/// Specialization for an empty typelist.
61
template
<>
62
struct
__reflection_typelist
<>
63
{
64
typedef
std::true_type
empty
;
65
};
66
67
/// Partial specialization.
68
template
<
typename
_First,
typename
... _Rest>
69
struct
__reflection_typelist
<_First, _Rest...>
70
{
71
typedef
std::false_type
empty
;
72
73
struct
first
74
{
75
typedef
_First type;
76
};
77
78
struct
rest
79
{
80
typedef
__reflection_typelist
<_Rest...> type;
81
};
82
};
83
84
/// Sequence abstraction metafunctions for manipulating a typelist.
85
86
87
#if __has_builtin(__bases)
88
/// Enumerate all the base classes of a class. Form of a typelist.
89
template
<
typename
_Tp>
90
struct
bases
91
{
92
typedef
__reflection_typelist
<__bases(_Tp)...>
type
;
93
};
94
#endif
95
96
#if __has_builtin(__direct_bases)
97
/// Enumerate all the direct base classes of a class. Form of a typelist.
98
template
<
typename
_Tp>
99
struct
direct_bases
100
{
101
typedef
__reflection_typelist
<__direct_bases(_Tp)...>
type
;
102
};
103
#endif
104
105
/// @} group metaprogramming
106
}
107
108
_GLIBCXX_END_NAMESPACE_VERSION
109
}
110
111
#endif // _GLIBCXX_TR2_TYPE_TRAITS
type_traits
std::empty
constexpr auto empty(const _Container &__cont) noexcept(noexcept(__cont.empty())) -> decltype(__cont.empty())
Return whether a container is empty.
Definition:
range_access.h:294
std::tr2::direct_bases
Enumerate all the direct base classes of a class. Form of a typelist.
Definition:
tr2/type_traits:99
std::tr2::bases
Sequence abstraction metafunctions for manipulating a typelist.
Definition:
tr2/type_traits:90
std::true_type
__bool_constant< true > true_type
The type used as a compile-time boolean with true value.
Definition:
type_traits:119
std
ISO C++ entities toplevel namespace is std.
c++config.h
std::false_type
__bool_constant< false > false_type
The type used as a compile-time boolean with false value.
Definition:
type_traits:122
std::tr2::__reflection_typelist
Definition:
tr2/type_traits:58
tr2
type_traits
Generated by
1.8.17