#ifndef COMPILER_SUPPORT_H #ifdef __has_include # if __has_include() # include # define have_optional 1 # elif __has_include() # include # define have_optional 1 # define have_experimental_optional 1 # else # define have_optional 0 # endif # if __has_include() # include # define have_variant 1 # elif __has_include() # include # define have_variant 1 # define have_experimental_variant 1 # else # define have_variant 0 # endif #endif namespace trygvis { namespace compiler { #if have_experimental_optional template using o = std::experimental::optional; #elif have_optional template using o = std::optional; #endif #if have_experimental_variant template using variant = std::experimental::variant; using monostate = std::experimental::monostate; #elif have_variant template using variant = std::variant; using monostate = std::monostate; #endif } // namespace compiler } // namespace trygvis #endif