// PR 99283, // { dg-additional-options "-std=c++2a -fmodule-header" } // { dg-module-cmi {} } #include "pr99283-7-traits.h" template struct char_traits; template> class basic_string; typedef basic_string string; template struct integral_constant { static constexpr _Tp value = __v; typedef _Tp value_type; typedef integral_constant<_Tp, __v> type; constexpr operator value_type() const noexcept { return value; } constexpr value_type operator()() const noexcept { return value; } }; template constexpr _Tp integral_constant<_Tp, __v>::value; typedef integral_constant true_type; typedef integral_constant false_type; template using __bool_constant = integral_constant; template _Up __declval(int); template _Tp __declval(long); template auto declval() noexcept -> decltype(__declval<_Tp>(0)); struct __do_is_nothrow_swappable_impl { template static __bool_constant< noexcept(swap(declval<_Tp&>(), declval<_Tp&>())) > __test(int); }; template struct __is_nothrow_swappable_impl : public __do_is_nothrow_swappable_impl { typedef decltype(__test<_Tp>(0)) type; }; template struct __is_nothrow_swappable : public __is_nothrow_swappable_impl<_Tp>::type { }; #include "pr99283-7-swap.h" class partial_ordering { public: friend constexpr bool operator==(partial_ordering, partial_ordering) noexcept = default; }; class strong_ordering { public: constexpr operator partial_ordering() const noexcept; }; template struct pair { constexpr void swap(pair& __p) noexcept(__is_nothrow_swappable<_T1>::value); }; template inline constexpr bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y); template struct char_traits { using comparison_category = strong_ordering; };