-betterC and extern(C++) classes
Moritz Maxeiner via Digitalmars-d
digitalmars-d at puremagic.com
Sun Sep 10 06:19:13 PDT 2017
On Sunday, 10 September 2017 at 09:31:55 UTC, Walter Bright wrote:
> On 9/10/2017 1:40 AM, Yuxuan Shui wrote:
>> I was experimenting with -betterC and found out that C++
>> classes doesn't work. Because the resulting object file needs
>> a symbol "_D14TypeInfo_Class6__vtblZ" which is in druntime. I
>> suppose this is to support T.classinfo?
>>
>> Could we remove T.classinfo and make classes work under
>> -betterC? Or is there some other reason preventing this from
>> happening?
>
> Yes, we do want to move towards "Better C++" working in an
> analogous manner, and that means removing the typeinfo
> dependency.
If TypeInfo for extern(C++) classes is removed, couldn't final
extern(C++) classes without base class and which don't implement
any interfaces omit the vtable so that the following assert holds:
---
final extern(C++) class Foo {}
static assert (__traits(classInstanceSize, Foo) == 0LU);
---
The reason I ask is that fairly often I have an abstraction
that's better suited as a reference type than a value type, but
doesn't need any runtime polymorphy (or the monitor standard
classes have). Structs + pointers are the only way I know of to
avoid the (in this special case) unneeded vtable overhead, but it
always ends up looking worse to read.
More information about the Digitalmars-d
mailing list