8 #include <zk/config.hpp>
18 #ifndef ZKPP_OPTIONAL_USE_STD_EXPERIMENTAL
19 # define ZKPP_OPTIONAL_USE_STD_EXPERIMENTAL 0
39 #ifndef ZKPP_OPTIONAL_USE_CUSTOM
40 # define ZKPP_OPTIONAL_USE_CUSTOM 0
47 #ifndef ZKPP_OPTIONAL_USE_STD
48 # if ZKPP_OPTIONAL_USE_STD_EXPERIMENTAL || ZKPP_OPTIONAL_USE_CUSTOM
49 # define ZKPP_OPTIONAL_USE_STD 0
51 # define ZKPP_OPTIONAL_USE_STD 1
55 #if ZKPP_OPTIONAL_USE_STD
56 # define ZKPP_OPTIONAL_INCLUDE <optional>
57 # define ZKPP_OPTIONAL_TEMPLATE std::optional
58 # define ZKPP_NULLOPT_TYPE std::nullopt_t
59 # define ZKPP_NULLOPT_VALUE std::nullopt
60 #elif ZKPP_OPTIONAL_USE_STD_EXPERIMENTAL
61 # define ZKPP_OPTIONAL_INCLUDE <experimental/optional>
62 # define ZKPP_OPTIONAL_TEMPLATE std::experimental::optional
63 # define ZKPP_NULLOPT_TYPE std::experimental::nullopt_t
64 # define ZKPP_NULLOPT_VALUE std::experimental::nullopt
65 #elif ZKPP_OPTIONAL_USE_CUSTOM
66 # if !defined ZKPP_OPTIONAL_INCLUDE || !defined ZKPP_NULLOPT_TYPE || !defined ZKPP_NULLOPT_VALUE
67 # error "When ZKPP_OPTIONAL_USE_CUSTOM is set, you must also define ZKPP_OPTIONAL_INCLUDE, ZKPP_NULLOPT_TYPE, and"
68 # error "ZKPP_NULLOPT_VALUE."
71 # error "Unknown type to use for zk::optional, zk::nullopt_t, and zk::nullopt"
76 #include ZKPP_OPTIONAL_INCLUDE
86 using optional = ZKPP_OPTIONAL_TEMPLATE<T>;
#define ZKPP_NULLOPT_TYPE
The type to use for zk::nullopt_t.
#define ZKPP_NULLOPT_VALUE
The value to use for zk::nullopt.