SeqAn3  3.0.3
The Modern C++ library for sequence analysis.
basic.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2021, Knut Reinert & MPI für molekulare Genetik
4 // This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5 // shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6 // -----------------------------------------------------------------------------------------------------
7 
13 #pragma once
14 
15 #include <tuple>
16 #include <seqan3/std/type_traits>
17 
18 #include <seqan3/core/platform.hpp>
19 
20 // ----------------------------------------------------------------------------
21 // is_constexpr
22 // ----------------------------------------------------------------------------
23 
28 #define SEQAN3_IS_CONSTEXPR(...) std::integral_constant<bool, __builtin_constant_p((__VA_ARGS__, 0))>::value
29 
30 namespace seqan3
31 {
32 
36 #ifdef SEQAN3_DEPRECATED_310
37 // ----------------------------------------------------------------------------
38 // remove_cvref_t
39 // ----------------------------------------------------------------------------
40 
44 template <typename t>
46 #endif // SEQAN3_DEPRECATED_310
47 
48 // ----------------------------------------------------------------------------
49 // remove_rvalue_reference
50 // ----------------------------------------------------------------------------
51 
57 template <typename t>
59 {
62 };
63 
68 template <typename t>
70 
71 // ----------------------------------------------------------------------------
72 // is_constexpr_default_constructible
73 // ----------------------------------------------------------------------------
74 
79 template <typename t>
81 {};
82 
87 template <typename t>
89  requires std::is_default_constructible_v<t>
91 struct is_constexpr_default_constructible<t> : std::integral_constant<bool, SEQAN3_IS_CONSTEXPR(t{})>
92 {};
93 
98 template <typename t>
99 inline constexpr bool is_constexpr_default_constructible_v = is_constexpr_default_constructible<t>::value;
100 
102 } // namespace seqan3
103 
104 namespace seqan3::detail
105 {
106 
111 // ----------------------------------------------------------------------------
112 // deferred_type
113 // ----------------------------------------------------------------------------
114 
121 template <typename t, typename ...dependent_ts>
122 struct deferred_type
123 {
125  using type = t;
126 };
127 
134 template <typename t, typename ...dependent_ts>
135 using deferred_type_t = typename deferred_type<t, dependent_ts...>::type;
136 
137 // ----------------------------------------------------------------------------
138 // ignore_t
139 // ----------------------------------------------------------------------------
140 
142 using ignore_t = std::remove_cvref_t<decltype(std::ignore)>;
143 
148 template <typename t>
149 constexpr bool decays_to_ignore_v = std::is_same_v<std::remove_cvref_t<t>, ignore_t>;
150 
152 
153 } // namespace seqan3::detail
154 
155 // ----------------------------------------------------------------------------
156 // SEQAN3_IS_SAME
157 // ----------------------------------------------------------------------------
158 
163 #if defined(__clang__)
164 # define SEQAN3_IS_SAME(...) __is_same(__VA_ARGS__)
165 #elif defined(__GNUC__)
166 # define SEQAN3_IS_SAME(...) __is_same_as(__VA_ARGS__)
167 #else
168 # define SEQAN3_IS_SAME(...) std::is_same_v<__VA_ARGS__>
169 #endif
typename remove_rvalue_reference< t >::type remove_rvalue_reference_t
Return the input type with && removed, but lvalue references preserved (transformation_trait shortcut...
Definition: basic.hpp:69
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides platform and dependency checks.
#define SEQAN3_DEPRECATED_310
Deprecation message for SeqAn 3.1.0 release.
Definition: platform.hpp:203
Whether a type std::is_default_constructible in constexpr-context.
Definition: basic.hpp:81
Return the input type with && removed, but lvalue references preserved.
Definition: basic.hpp:59
Provides C++20 additions to the type_traits header.