#pragma once #include #include #include #include #include #include #include #include // NOLINTBEGIN(modernize-use-constraints) namespace stdx { inline namespace v1 { template struct tombstone_traits { using unspecialized = int; constexpr auto operator()() const { static_assert( stdx::always_false_v, "To use stdx::optional you must specialize stdx::tombstone_traits"); } }; template constexpr auto has_tombstone_v = true; template constexpr auto has_tombstone_v< T, std::void_t::unspecialized>> = false; template struct tombstone_traits>> { constexpr auto operator()() const { return std::numeric_limits::infinity(); } }; template struct tombstone_traits>> { constexpr auto operator()() const { return nullptr; } }; template