Subject: Re: [std-proposals] P1839 and the object representation of subobjects
From: Thiago Macieira (thiago_at_[hidden])
Date: 2020-07-22 11:38:34
On Tuesday, 21 July 2020 23:58:41 PDT Jason McKesson via Std-Proposals wrote:
> Nesting becomes a bit cumbersome to handle:
> struct Inner
> int i;
> struct Outer
> Inner in;
> Outer o;
> back_to_object<&Outer::in>(back_to_object<&Inner::i>(&o.in.i)) == &o;
That looks the right amount of cumbersome for a feature that isn't expected to
be used without care.
> But overall, it'd make a lot more sense to just make the tweaks I
> suggested to P1839, which makes `reinterpret_cast`ing to an object
> representation essentially give you a pointer to the start of that
> object's representation within the array of the largest containing
> contiguous object. After all, if you can go down into nested types, it
> makes sense that you could go "up" too.
No doubt. I wasn't proposing to choose one or the other.
But by adding this library function, we remove the need for the offsetof
macro. The function uses only C++ constructs.
> Given the above changes, it's more reasonable to just allow an NSDM
> member pointer to be converted to an offset into its nearest
> subobject. So the above becomes:
> constexpr auto offset = offset_of<&Outer::in, &Inner::i>;
> Where `offset_of` is a variable template that takes a pack of member
> pointers, as described above.
Sounds good, but I still think a function that applies the offset and does the
proper laundering is recommended.
Another thing we can have is a pointer-to-member combiner. That is, for each
it combines and returns
-- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org Software Architect - Intel DPG Cloud Engineering
STD-PROPOSALS list run by herb.sutter at gmail.com
Standard Proposals Archives on Google Groups