tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
variant_alternative.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2021 Tobias Hienzsch
3
4#ifndef TETL_VARIANT_VARIANT_ALTERNATIVE_HPP
5#define TETL_VARIANT_VARIANT_ALTERNATIVE_HPP
6
7#include <etl/_mpl/at.hpp>
8#include <etl/_type_traits/add_const.hpp>
9#include <etl/_type_traits/add_cv.hpp>
10#include <etl/_type_traits/add_volatile.hpp>
11#include <etl/_variant/variant_fwd.hpp>
12
13namespace etl {
14
15template <size_t Idx, typename... Ts>
16struct variant_alternative<Idx, variant<Ts...>> {
17 static_assert(Idx < sizeof...(Ts));
18 using type = mpl::at_t<Idx, mpl::list<Ts...>>;
19};
20
21template <size_t I, typename T>
22using variant_alternative_t = typename variant_alternative<I, T>::type;
23
24template <size_t Idx, typename T>
25struct variant_alternative<Idx, T const> {
26 using type = add_const_t<variant_alternative_t<Idx, T>>;
27};
28
29template <size_t Idx, typename T>
30struct variant_alternative<Idx, T volatile> {
31 using type = add_volatile_t<variant_alternative_t<Idx, T>>;
32};
33
34template <size_t Idx, typename T>
35struct variant_alternative<Idx, T const volatile> {
36 using type = add_cv_t<variant_alternative_t<Idx, T>>;
37};
38
39} // namespace etl
40
41#endif // TETL_VARIANT_VARIANT_ALTERNATIVE_HPP
Definition at.hpp:10
Definition adjacent_find.hpp:9
Definition list.hpp:11
Definition variant.hpp:99