C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Defect Report: Core constant expression inverse of standard conversion sequences

From: Edward Catmur <ecatmur_at_[hidden]>
Date: Mon, 22 Aug 2022 05:21:18 +0100
On Mon, 22 Aug 2022, 02:00 Brian Bi via Std-Proposals, <
std-proposals_at_[hidden]> wrote:

>
>
> On Sun, Aug 21, 2022 at 6:06 AM David Ledger via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
>> Hello W21,
>>
>> The following example shows a static_cast as per [expr.static.cast#7]:
>>
>> ```CPP
>> int v = 10;
>> auto lambda = [v](int)
>> {
>> return v + 32;
>> };
>> void * ptr = &lambda;
>> auto * reverse = static_cast<decltype(lambda) *>(ptr);
>> ```
>>
>> In a constant expression, this is invalid because of [expr.const-5.14].
>>
>> However, in this case it is an inverse of a conversion sequence. Since
>> this causes issues when implementing a constexpr `std::function_ref` and
>> similar usages I believe the clause should be modified to the following:
>> > (5.14) a conversion from type cv void* to a pointer-to-object type<ins>*,
>> other than when this conversion is the inverse of any standard conversion
>> sequence*</ins>;
>>
>
> I seem to recall some discussion on the predecessor of this mailing list
> about implementation difficulty of allowing casts from void* in constant
> expressions, but I keep failing to find the thread.
>
> I'm not sure if your proposed restriction makes it any easier to
> implement. I wish whoever originally posted the post that I'm thinking
> about would post a reply :)
>

Yes, you're not going to get compile time type erasure via function
pointers in as a defect report. Even virtual functions would be a full on
proposal.

>

Received on 2022-08-22 04:21:32