/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include namespace facebook::react::jsinspector_modern { /** * A template for easily creating empty types that are distinct from one * another. Useful if you need to generate marker types for use in an * std::variant, and a single std::monostate won't do. */ template struct UniqueMonostate { constexpr bool operator==(const UniqueMonostate&) const noexcept { return true; } constexpr bool operator!=(const UniqueMonostate&) const noexcept { return false; } constexpr bool operator<(const UniqueMonostate&) const noexcept { return false; } constexpr bool operator>(const UniqueMonostate&) const noexcept { return false; } constexpr bool operator<=(const UniqueMonostate&) const noexcept { return true; } constexpr bool operator>=(const UniqueMonostate&) const noexcept { return true; } }; } // namespace facebook::react::jsinspector_modern namespace std { template struct hash<::facebook::react::jsinspector_modern::UniqueMonostate> { size_t operator()( const ::facebook::react::jsinspector_modern::UniqueMonostate&) const noexcept { return key; } }; } // namespace std