Radium Engine  1.5.20
Loading...
Searching...
No Matches
StdOptional.hpp
1#pragma once
2
3/*
4 * This file provides
5 * - Ra::Core::Utils::optional, which is an alias for std::optional or std::experimental::optional,
6 * - preprocessor symbols:
7 * - have_optional: defined if optional is found in std:: or in std::experimental::
8 * - have_experimental_optional: defined iff optional is found in std::experimental::
9 *
10 * To trigger an error if optional is not found, define RA_REQUIRE_OPTIONAL before including this
11 * file:
12 * \code{.cpp}
13 * #define RA_REQUIRE_OPTIONAL
14 * #include <Core/Utils/StdOptional.hpp> // trigger an error if optional is not found
15 * #undef RA_REQUIRE_OPTIONAL
16 * \endcode
17 */
18
19#ifdef __has_include
20# if __has_include( <optional>)
21# include <optional>
22# define have_optional
23# elif __has_include( <experimental/optional>)
24# include <experimental/optional>
25# define have_optional
26# define have_experimental_optional
27# else
28# ifdef RA_REQUIRE_OPTIONAL
29# error Feature Optionnal is required
30# endif
31# endif
32#endif
33
34// Create alias
35#ifdef have_optional
36namespace Ra {
37namespace Core {
38namespace Utils {
39# ifdef have_experimental_optional
40template <typename T>
41using optional = std::experimental::optional<T>;
42# else
43template <typename T>
44using optional = std::optional<T>;
45# endif
46} // namespace Utils
47} // namespace Core
48} // namespace Ra
49#endif
50// end Create alias
hepler function to manage enum as underlying types in VariableSet
Definition Cage.cpp:3