Am Mi., 4. Juni 2025 um 12:57 Uhr schrieb Tomasz Kaminski < tkami...@redhat.com>:
> > > On Wed, Jun 4, 2025 at 12:43 PM Daniel Krügler <daniel.krueg...@gmail.com> > wrote: > >> Am Mi., 4. Juni 2025 um 11:27 Uhr schrieb Tomasz Kamiński < >> tkami...@redhat.com>: >> >>> [...] >>> + >>> +template<typename Ret, typename Other> >>> + requires std::is_integral_v<Other> >>> +struct std::common_type<Rep<Ret>, Other> >>> +{ >>> + using type = Rep<Ret>; >>> +}; >>> + >>> +template<typename Ret, typename Other> >>> + requires std::is_integral_v<Other> >>> +struct std::common_type<Other, Rep<Ret>> >>> + : std::common_type<Rep<Ret>, Other> >>> +{ }; >>> >> >> Why is this second specialization needed? It seems to me >> that [meta.trans.other] p5 says that it is already provided by the library >> implementation of std::common_type. >> > My reading of the paragraph is different. It says that if one is > specialized, we also need to specialize the other: > > Moreover, common_type_t<T1, T2> shall denote the same type, if any, as > does common_type_t<T2, T1>. > <https://eel.is/c++draft/meta.trans.other#5.sentence-4> > > No diagnostic is required for a violation of this Note's rules. > <https://eel.is/c++draft/meta.trans.other#5.sentence-5> > "shall" are requirements on the users. > Yes you are right, sorry for the noise. - Daniel