OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
variant.hpp
1#pragma once
2
3#include <ossia/detail/config.hpp>
4
5// Only when optimizing: without optimization, flatten keeps the locals of every
6// inlined callee in a single frame, which can overflow a thread's stack.
7#if defined(__clang__) && defined(__OPTIMIZE__)
8#define OSSIA_MAXIMUM_INLINE OSSIA_INLINE __attribute__((flatten))
9#else
10#define OSSIA_MAXIMUM_INLINE OSSIA_INLINE
11#endif
12
13#if __has_include(<boost/variant2.hpp>)
14#include <boost/variant2.hpp>
15namespace ossia_variant_alias = boost::variant2;
16#else
17#include <mpark/variant.hpp>
18namespace ossia_variant_alias = mpark;
19#endif
20
21namespace ossia
22{
23using monostate = ossia_variant_alias::monostate;
24#if __cpp_concepts >= 201907L
25template <typename T>
26concept nothrow_move_constructible = std::is_nothrow_move_constructible_v<T>;
27
28template <nothrow_move_constructible... Args>
29#else
30template <typename... Args>
31#endif
32using variant = ossia_variant_alias::variant<Args...>;
33
34template <typename... Args>
35using slow_variant = ossia_variant_alias::variant<Args...>;
36
37template <std::size_t N, typename T>
38using variant_element = ossia_variant_alias::variant_alternative<N, T>;
39template <std::size_t N, typename T>
40using variant_element_t = ossia_variant_alias::variant_alternative_t<N, T>;
41
42using ossia_variant_alias::operator==;
43using ossia_variant_alias::operator!=;
44using ossia_variant_alias::operator<;
45using ossia_variant_alias::operator>;
46using ossia_variant_alias::operator<=;
47using ossia_variant_alias::operator>=;
48
49// using boost::variant2::in_place;
50// using ossia_variant_alias::in_place;
51using ossia_variant_alias::get;
52using ossia_variant_alias::get_if;
53using ossia_variant_alias::in_place_index;
54using ossia_variant_alias::in_place_type;
55using ossia_variant_alias::visit;
56}
Definition git_info.h:7