September 22, 2022
On Thursday, 22 September 2022 at 18:00:53 UTC, Paul Backus wrote:
> On Thursday, 22 September 2022 at 16:52:54 UTC, Timon Gehr wrote:
>> On 21.09.22 14:32, Paul Backus wrote:
>>>>
>>>> They are not semantically the same. The first can be instantiated with any type and conditionally makes an output (it is empty otherwise), the other says it cannot be instantiated unless the arguments have specific properties.
>>> 
>>> If you want the semantics to match exactly you can replace the `static if` with a `static assert` (or add `else static assert(0);`).
>>
>> I think this is not true.
>>
> [...]
>>
>> `static assert` can give you a custom error message, but template constraints have much better overloading behavior. The two features are not comparable.
>
> In general, yes. In the context of the specific example in this thread, they are the same. In any case, the difference has no bearing on the main topic of discussion here, which is name visibility.

I think the underlying principle is that the user generally expects them to behave similarly. Enhancing template constraint name visibility is probably a good thing on that principle. Figuring out some way for Timon's example to compile might also be good (perhaps overload sets would need an ordering to put templated functions with template constraints above those without template constraints?).
1 2
Next ›   Last »