SeqAn3  3.0.1
The Modern C++ library for sequence analysis.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
concept.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2020, 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 <functional>
16 #include <type_traits>
17 
18 #include <meta/meta.hpp>
19 
21 #include <seqan3/std/concepts>
22 
23 namespace seqan3
24 {
26 // Forward declarations
27 template <typename derived_t, typename value_t>
28 struct pipeable_config_element;
30 }
31 
32 namespace seqan3::detail
33 {
34 
35 // ----------------------------------------------------------------------------
36 // Concept config_element
37 // ----------------------------------------------------------------------------
38 
40 template <typename derived_t>
41 class config_element_base;
43 
63 template <typename config_t>
66 SEQAN3_CONCEPT config_element = std::semiregular<std::remove_reference_t<config_t>> &&
67 requires (config_t c)
68 {
70  { c.value };
71  // Must inherit from the pipeable_config_element class.
72  requires std::is_base_of_v<pipeable_config_element<config_t, decltype(c.value)>, config_t>;
73 };
75 } // namespace seqan3::detail
semiregular
Subsumes std::copyable and std::default_constructible.
functional
template_inspection.hpp
Provides seqan3::type_list and auxiliary type traits.
concepts
The Concepts library.
seqan3
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:36
std::remove_reference_t
std::is_base_of_v
T is_base_of_v