On Wed, Jun 4, 2025 at 1:06 PM Daniel Krügler <daniel.krueg...@gmail.com>
wrote:

> 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.
>
FWIW, I initially wrote the test with only one of these specializations, as
you suggested.
Adding the second one was driven by compiler errors.

>
> - Daniel
>
>
>

Reply via email to