Attributes not propagating to objects via typeinfo?

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 14 01:22:31 PDT 2015


On Thursday, 13 August 2015 at 16:05:19 UTC, Steven Schveighoffer 
wrote:
> On 8/13/15 11:59 AM, Steven Schveighoffer wrote:
>
>> That is definitely a bug. It's because typeid is looking up 
>> the derived
>> type via the vtable, but the compiler should rewrap it with 
>> 'shared'
>> afterwards.
>
> Actually, now that I think about it, I'm not sure how the 
> compiler can figure this out.
>
> There would have to be a way to construct a TypeInfo_Shared at 
> runtime, which the compiler shouldn't be doing. Alternatively, 
> it could proactively create a TypeInfo_Shared (and all the 
> other flavors) for each class type in the runtime, and then 
> look it up using some hash mechanism.
>
> This likely isn't fixable.
>
> What you CAN do, however, is:
>
> typeid(typeof(c))
>
> Which should get the *static* type (and that should be 
> TypeInfo_Shared in both struct and class instances).
>
> So likely this is not a bug, or at the best, a wontfix.

If it yields invalid results, it should at least be forbidden, if 
it can't be fixed.


More information about the Digitalmars-d-learn mailing list