22#if SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
25namespace seqan3::detail
31template <
typename basic_
string_t>
38template <
typename value_t,
typename traits_t,
typename allocator_t>
39struct is_basic_string<
std::basic_string<value_t, traits_t, allocator_t>> :
std::true_type
45template <
typename basic_
string_t>
46constexpr bool is_basic_string_v = is_basic_string<basic_string_t>::value;
72template <
typename type>
73concept container =
requires (type val, type val2, type
const cval,
typename type::iterator it) {
75 typename type::value_type;
76 typename type::reference;
77 typename type::const_reference;
101 } -> std::same_as<type>;
104 } -> std::same_as<type>;
107 } -> std::same_as<type &>;
114 } -> std::same_as<typename type::iterator>;
117 } -> std::same_as<typename type::iterator>;
120 } -> std::same_as<typename type::const_iterator>;
123 } -> std::same_as<typename type::const_iterator>;
126 } -> std::same_as<typename type::const_iterator>;
129 } -> std::same_as<typename type::const_iterator>;
131 requires !std::equality_comparable<typename type::value_type> || std::equality_comparable<type>;
135 } -> std::same_as<void>;
138 } -> std::same_as<void>;
141 } -> std::same_as<void>;
145 } -> std::same_as<typename type::size_type>;
148 } -> std::same_as<typename type::size_type>;
151 } -> std::same_as<bool>;
171template <
typename type>
173 requires (type val, type val2, type
const cval) {
178 type(
typename type::size_type{},
typename type::value_type{})
181 type{val2.begin(), val2.end()}
188 } -> std::same_as<type &>;
192 val.assign(val2.begin(), val2.end())
198 val.assign(
typename type::size_type{},
typename type::value_type{})
204#if SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
206 val.insert(val.begin(), val2.front())
207 } -> std::same_as<typename type::iterator>;
209 val.insert(val.begin(),
typename type::value_type{})
210 } -> std::same_as<typename type::iterator>;
213 requires detail::is_basic_string_v<type>
214 ||
requires (type val, type val2)
216 requires requires (type val, type val2)
220 val.insert(val.cbegin(), val2.front())
221 } -> std::same_as<typename type::iterator>;
223 val.insert(val.cbegin(),
typename type::value_type{})
224 } -> std::same_as<typename type::iterator>;
226 val.insert(val.cbegin(),
typename type::size_type{},
typename type::value_type{})
227 } -> std::same_as<typename type::iterator>;
229 val.insert(val.cbegin(), val2.begin(), val2.end())
230 } -> std::same_as<typename type::iterator>;
233 } -> std::same_as<typename type::iterator>;
236#if SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
238 requires detail::is_basic_string_v<type>
239 ||
requires (type val)
241 requires requires (type val)
245 val.erase(val.cbegin())
246 } -> std::same_as<typename type::iterator>;
248 val.erase(val.cbegin(), val.cend())
249 } -> std::same_as<typename type::iterator>;
253 val.push_back(val.front())
254 } -> std::same_as<void>;
256 val.push_back(
typename type::value_type{})
257 } -> std::same_as<void>;
260 } -> std::same_as<void>;
263 } -> std::same_as<void>;
268 } -> std::same_as<typename type::reference>;
271 } -> std::same_as<typename type::const_reference>;
274 } -> std::same_as<typename type::reference>;
277 } -> std::same_as<typename type::const_reference>;
297template <
typename type>
304 } -> std::same_as<typename type::reference>;
307 } -> std::same_as<typename type::reference>;
312 } -> std::same_as<void>;
314 val.resize(0,
typename type::value_type{})
315 } -> std::same_as<void>;
333template <
typename type>
339 } -> std::same_as<typename type::size_type>;
342 } -> std::same_as<void>;
345 } -> std::same_as<void>;
The (most general) container concept as defined by the standard library.
A more refined container concept than seqan3::sequence_container.
A more refined container concept than seqan3::random_access_container.
A more refined container concept than seqan3::container.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
SeqAn specific customisations in the standard namespace.