Date: Sat, 10 Jan 2026 13:00:30 -0500
Yes, Peter, your summary is correct, except that the "do nothing trivial constructor" can be called, but likely won't.
Could you point me to what clarified it for you so I can incorporate it into the paper?
Thanks!
> On Jan 10, 2026, at 12:54 PM, Peter Bindels <dascandy_at_[hidden]> wrote:
>
> Hi Jody,
>
> On Sat, Jan 10, 2026 at 6:29 PM Jody Hagins <coachhagins_at_[hidden] <mailto:coachhagins_at_[hidden]>> wrote:
>> Hi Peter,
>>
>> Thanks for the feedback.
>>
>> I'm writing this off the top of my head, so forgive syntax issues.
>>
>> First, a terminology note: I'm talking about an "implicit-lifetime type," not "trivial lifetime." This distinction matters — it's about whether an object's lifetime can begin *implicitly* (via `memcpy`, `mmap`, `start_lifetime_as`).
>> <snip>
>> Does this help clarify the problem and proposed solution?
>
> Yes, completely.
>
>> I could have just said, "What Breno said."
>
> No, I did not get this distinction from what he said. I was aware of implicit lifetime types but didn't realize the rules were as you laid them out. So:
>
> - Implicit lifetime objects need a trivial constructor, but not necessarily one that you can call, or that you actually do call
> - std::atomic used to have that, but lost it in C++20
> - We want the problem from pre-C++-20 fixed, but implicit lifetime back
> - adding a do-nothing uncallable trivial constructor completely fixes it, so we should do that
>
> Correct?
>
> If so, sounds good to me.
>
> The specific example helps a lot to understand how it should work from a user point of view.
>
> Thanks,
> Peter
Could you point me to what clarified it for you so I can incorporate it into the paper?
Thanks!
> On Jan 10, 2026, at 12:54 PM, Peter Bindels <dascandy_at_[hidden]> wrote:
>
> Hi Jody,
>
> On Sat, Jan 10, 2026 at 6:29 PM Jody Hagins <coachhagins_at_[hidden] <mailto:coachhagins_at_[hidden]>> wrote:
>> Hi Peter,
>>
>> Thanks for the feedback.
>>
>> I'm writing this off the top of my head, so forgive syntax issues.
>>
>> First, a terminology note: I'm talking about an "implicit-lifetime type," not "trivial lifetime." This distinction matters — it's about whether an object's lifetime can begin *implicitly* (via `memcpy`, `mmap`, `start_lifetime_as`).
>> <snip>
>> Does this help clarify the problem and proposed solution?
>
> Yes, completely.
>
>> I could have just said, "What Breno said."
>
> No, I did not get this distinction from what he said. I was aware of implicit lifetime types but didn't realize the rules were as you laid them out. So:
>
> - Implicit lifetime objects need a trivial constructor, but not necessarily one that you can call, or that you actually do call
> - std::atomic used to have that, but lost it in C++20
> - We want the problem from pre-C++-20 fixed, but implicit lifetime back
> - adding a do-nothing uncallable trivial constructor completely fixes it, so we should do that
>
> Correct?
>
> If so, sounds good to me.
>
> The specific example helps a lot to understand how it should work from a user point of view.
>
> Thanks,
> Peter
Received on 2026-01-10 18:00:43
