guanaqo
1.0.0-alpha.25
Utilities for scientific software
Loading...
Searching...
No Matches
possible-alias.hpp
Go to the documentation of this file.
1
#pragma once
2
3
/// @file
4
/// @ingroup core
5
/// Utility to guard against accidental template aliases.
6
7
#include <type_traits>
8
9
namespace
guanaqo
{
10
namespace
detail
{
11
12
/// Check if @p A is equal to any of @p Bs.
13
template
<
class
A,
class
... Bs>
14
constexpr
bool
any_is_same
() {
15
return
(std::is_same_v<A, Bs> || ...);
16
}
17
18
/// Unused unique type tag for template specializations that were rejected
19
/// because some types were not distinct.
20
template
<
class
...>
21
struct
dummy
;
22
23
}
// namespace detail
24
25
/// If @p NewAlias is not the same type as any of @p PossibleAliases, the result
26
/// is @p NewAlias. If @p NewAlias is not distinct from @p PossibleAliases, the
27
/// result is a dummy type, uniquely determined by @p NewAlias and
28
/// @p PossibleAliases.
29
/// @ingroup core
30
template
<
class
NewAlias,
class
... PossibleAliases>
31
using
possible_alias_t
=
32
std::conditional_t<
detail::any_is_same
<NewAlias, PossibleAliases...>(),
33
detail::dummy<NewAlias, PossibleAliases...>
, NewAlias>;
34
35
}
// namespace guanaqo
guanaqo::possible_alias_t
std::conditional_t< detail::any_is_same< NewAlias, PossibleAliases... >(), detail::dummy< NewAlias, PossibleAliases... >, NewAlias > possible_alias_t
If NewAlias is not the same type as any of PossibleAliases, the result is NewAlias.
Definition
possible-alias.hpp:31
guanaqo::detail
Definition
span.hpp:13
guanaqo::detail::any_is_same
constexpr bool any_is_same()
Check if A is equal to any of Bs.
Definition
possible-alias.hpp:14
guanaqo::detail::dummy
Unused unique type tag for template specializations that were rejected because some types were not di...
Definition
possible-alias.hpp:21
guanaqo
Definition
blas-interface.hpp:9
include
guanaqo
possible-alias.hpp
Generated on
for guanaqo by
1.16.1