19#if SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
22namespace seqan3::detail
28template <
typename basic_
string_t>
35template <
typename value_t,
typename traits_t,
typename allocator_t>
36struct is_basic_string<
std::basic_string<value_t, traits_t, allocator_t>> :
std::true_type
42template <
typename basic_
string_t>
43constexpr bool is_basic_string_v = is_basic_string<basic_string_t>::value;
69template <
typename type>
70concept container =
requires (type val, type val2, type
const cval,
typename type::iterator it) {
72 typename type::value_type;
73 typename type::reference;
74 typename type::const_reference;
96 { type{} } -> std::same_as<type>;
97 { type{type{}} } -> std::same_as<type>;
98 { val = val2 } -> std::same_as<type &>;
101 { val.begin() } -> std::same_as<typename type::iterator>;
102 { val.end() } -> std::same_as<typename type::iterator>;
103 { cval.begin() } -> std::same_as<typename type::const_iterator>;
104 { cval.end() } -> std::same_as<typename type::const_iterator>;
105 { val.cbegin() } -> std::same_as<typename type::const_iterator>;
106 { val.cend() } -> std::same_as<typename type::const_iterator>;
108 requires !std::equality_comparable<typename type::value_type> || std::equality_comparable<type>;
110 { val.swap(val2) } -> std::same_as<void>;
111 {
swap(val, val2) } -> std::same_as<void>;
112 {
std::swap(val, val2) } -> std::same_as<void>;
114 { val.size() } -> std::same_as<typename type::size_type>;
115 { val.max_size() } -> std::same_as<typename type::size_type>;
116 { val.empty() } -> std::same_as<bool>;
136template <
typename type>
141 { type(
typename type::size_type{},
typename type::value_type{}) };
142 { type{val2.begin(), val2.end()} };
147 { val.assign(val2.begin(), val2.end()) };
149 { val.assign(
typename type::size_type{},
typename type::value_type{}) };
154#if SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
155 { val.insert(val.begin(), val2.front()) } -> std::same_as<typename type::iterator>;
156 { val.insert(val.begin(),
typename type::value_type{}) } -> std::same_as<typename type::iterator>;
159 requires detail::is_basic_string_v<type>
160 ||
requires (type val, type val2)
162 requires requires (type val, type val2)
165 { val.insert(val.cbegin(), val2.front()) } -> std::same_as<typename type::iterator>;
166 { val.insert(val.cbegin(),
typename type::value_type{}) } -> std::same_as<typename type::iterator>;
168 val.insert(val.cbegin(),
typename type::size_type{},
typename type::value_type{})
169 } -> std::same_as<typename type::iterator>;
170 { val.insert(val.cbegin(), val2.begin(), val2.end()) } -> std::same_as<typename type::iterator>;
173 } -> std::same_as<typename type::iterator>;
176#if SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI
178 requires detail::is_basic_string_v<type>
179 ||
requires (type val)
181 requires requires (type val)
184 { val.erase(val.cbegin()) } -> std::same_as<typename type::iterator>;
185 { val.erase(val.cbegin(), val.cend()) } -> std::same_as<typename type::iterator>;
188 { val.push_back(val.front()) } -> std::same_as<void>;
189 { val.push_back(
typename type::value_type{}) } -> std::same_as<void>;
190 { val.pop_back() } -> std::same_as<void>;
191 { val.clear() } -> std::same_as<void>;
194 { val.front() } -> std::same_as<typename type::reference>;
195 { cval.front() } -> std::same_as<typename type::const_reference>;
196 { val.back() } -> std::same_as<typename type::reference>;
197 { cval.back() } -> std::same_as<typename type::const_reference>;
217template <
typename type>
222 { val[0] } -> std::same_as<typename type::reference>;
223 { val.at(0) } -> std::same_as<typename type::reference>;
226 { val.resize(0) } -> std::same_as<void>;
227 { val.resize(0,
typename type::value_type{}) } -> std::same_as<void>;
245template <
typename type>
249 { val.capacity() } -> std::same_as<typename type::size_type>;
250 { val.reserve(0) } -> std::same_as<void>;
251 { val.shrink_to_fit() } -> 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:26
SeqAn specific customisations in the standard namespace.