algorithms  2.2.0
Framework-independent algorithms for the EIC
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
6
7#include <optional>
8#include <type_traits>
9#include <vector>
10
11namespace {
12
13using namespace algorithms;
14
15struct Coll {};
16
17// Normal data type T
19static_assert(std::is_same_v<data_type_t<Coll>, Coll>);
20static_assert(std::is_same_v<input_type_t<Coll>, gsl::not_null<const Coll*>>);
21static_assert(std::is_same_v<output_type_t<Coll>, gsl::not_null<Coll*>>);
22
23// Optional data type std::optional<T>
24using OptColl = std::optional<Coll>;
26static_assert(std::is_same_v<data_type_t<OptColl>, Coll>);
27static_assert(std::is_same_v<input_type_t<OptColl>, const Coll*>);
28static_assert(std::is_same_v<output_type_t<OptColl>, Coll*>);
29
30// Vector of normal data std::vector<T>
31using VecColl = std::vector<Coll>;
33static_assert(std::is_same_v<data_type_t<VecColl>, Coll>);
34static_assert(std::is_same_v<input_type_t<VecColl>, const std::vector<gsl::not_null<const Coll*>>>);
35static_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>>
38using VecOptColl = std::vector<std::optional<Coll>>;
41static_assert(std::is_same_v<data_type_t<VecOptColl>, Coll>);
42static_assert(std::is_same_v<input_type_t<VecOptColl>, const std::vector<const Coll*>>);
43static_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
46using VecOptConstColl = std::vector<std::optional<const Coll>>;
48static_assert(std::is_same_v<data_type_t<VecOptConstColl>, const Coll>);
49static_assert(std::is_same_v<input_type_t<VecOptConstColl>, const std::vector<const Coll*>>);
50
51} // namespace
constexpr bool is_vector_v
Definition type_traits.h:23
constexpr bool is_optional_v
Definition type_traits.h:27
constexpr bool is_vector_of_optional_v
Definition type_traits.h:33