https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107525

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Giuseppe D'Angelo from comment #4)
> Sorry, what I meant is, of course there is interest at keeping this code to
> compile in pre-C++20 mode, and possibly have the same semantics no matter
> what's the language version used? Or is it acceptable to have such an "API
> break"? (E.g. stuff like `is_convertible_v<propagate_const<Derived *>, Base
> *>` changes value.)

I think that's fine for TS material.


> More in general, I think these operators are strangely defined. I'm not sure
> why they're not simply defined to be 
> 
>   template <typename U> operator U *() requires (std::is_convertible_v<T, U
> *>);
> 
> mut.mut. for the `const` version. 

That seems better to me.

> The current definition also allows for pointer arithmetic (only if one uses
> a C++20 constraint, otherwise it doesn't work), which is something the
> original paper says it does NOT want to support. And the current definition
> allows for `delete`ing a propagate_const, which maybe is wanted, but in
> contradiction with the lack of support for pointer arithmetic.
> 
> I guess I'll need to submit a paper.

Please don't! At least not in the next 9 days. We intend to vote out LFTSv3 at
next week's meeting, there will be no more proposals for LFTS considered. And I
don't want to derail the vote next week by having open proposals arriving at
the last minute.

Feel free to file a library issue though. If propagate_const ever gets proposed
for inclusion in the standard then this should be taken into account.

Reply via email to