export module bedrock.semantics:equivalence; import :utility; import :referenceable; import :integral; namespace br { export template concept PartialEquivalence = requires(Unref a, Unref b) { { a == b } -> SameAs; { a != b } -> SameAs; { b == a } -> SameAs; { b != a } -> SameAs; }; export template struct EquivalenceType { static constexpr bool is_valid = false; }; export template concept Equivalence = PartialEquivalence && (EquivalenceType::is_valid || Integral); } // namespace br