algorithms
2.2.0
Framework-independent algorithms for the EIC
Toggle main menu visibility
Loading...
Searching...
No Matches
type_traits.cpp
Go to the documentation of this file.
1
// SPDX-License-Identifier: LGPL-3.0-or-later
2
// Copyright (C) 2026 Wouter Deconinck
3
//
4
// Compile-time checks of the argument type deduction in type_traits.h
5
#include <
algorithms/type_traits.h
>
6
7
#include <optional>
8
#include <type_traits>
9
#include <vector>
10
11
namespace
{
12
13
using namespace
algorithms
;
14
15
struct
Coll {};
16
17
// Normal data type T
18
static_assert
(!
is_vector_v<Coll>
&& !
is_optional_v<Coll>
&& !
is_vector_of_optional_v<Coll>
);
19
static_assert
(std::is_same_v<data_type_t<Coll>, Coll>);
20
static_assert
(std::is_same_v<input_type_t<Coll>, gsl::not_null<const Coll*>>);
21
static_assert
(std::is_same_v<output_type_t<Coll>, gsl::not_null<Coll*>>);
22
23
// Optional data type std::optional<T>
24
using
OptColl = std::optional<Coll>;
25
static_assert
(!
is_vector_v<OptColl>
&&
is_optional_v<OptColl>
&& !
is_vector_of_optional_v<OptColl>
);
26
static_assert
(std::is_same_v<data_type_t<OptColl>, Coll>);
27
static_assert
(std::is_same_v<input_type_t<OptColl>,
const
Coll*>);
28
static_assert
(std::is_same_v<output_type_t<OptColl>, Coll*>);
29
30
// Vector of normal data std::vector<T>
31
using
VecColl = std::vector<Coll>;
32
static_assert
(
is_vector_v<VecColl>
&& !
is_optional_v<VecColl>
&& !
is_vector_of_optional_v<VecColl>
);
33
static_assert
(std::is_same_v<data_type_t<VecColl>, Coll>);
34
static_assert
(std::is_same_v<input_type_t<VecColl>,
const
std::vector<gsl::not_null<const Coll*>>>);
35
static_assert
(std::is_same_v<output_type_t<VecColl>,
const
std::vector<gsl::not_null<Coll*>>>);
36
37
// Vector of optional data std::vector<std::optional<T>>
38
using
VecOptColl = std::vector<std::optional<Coll>>;
39
static_assert
(
is_vector_v<VecOptColl>
&& !
is_optional_v<VecOptColl>
&&
40
is_vector_of_optional_v<VecOptColl>
);
41
static_assert
(std::is_same_v<data_type_t<VecOptColl>, Coll>);
42
static_assert
(std::is_same_v<input_type_t<VecOptColl>,
const
std::vector<const Coll*>>);
43
static_assert
(std::is_same_v<output_type_t<VecOptColl>,
const
std::vector<Coll*>>);
44
45
// Same with a const-qualified data type, as commonly used for input collections
46
using
VecOptConstColl = std::vector<std::optional<const Coll>>;
47
static_assert
(
is_vector_of_optional_v<VecOptConstColl>
);
48
static_assert
(std::is_same_v<data_type_t<VecOptConstColl>,
const
Coll>);
49
static_assert
(std::is_same_v<input_type_t<VecOptConstColl>,
const
std::vector<const Coll*>>);
50
51
}
// namespace
algorithms
Definition
algorithm.h:52
algorithms::is_vector_v
constexpr bool is_vector_v
Definition
type_traits.h:23
algorithms::is_optional_v
constexpr bool is_optional_v
Definition
type_traits.h:27
algorithms::is_vector_of_optional_v
constexpr bool is_vector_of_optional_v
Definition
type_traits.h:33
type_traits.h
core
src
type_traits.cpp
Generated by
1.17.0