B Revzin - if const expr isn't broken (was Re: My Meeting C++ Keynote video is now available)
Stefan Koch
uplink.coder at googlemail.com
Thu Jan 17 23:50:11 UTC 2019
On Thursday, 17 January 2019 at 22:44:08 UTC, H. S. Teoh wrote:
> On Thu, Jan 17, 2019 at 10:20:24PM +0000, Stefan Koch via
> Digitalmars-d-announce wrote:
>> P.S. There is one caveat: because of how type-functions work
>> they cannot, you cannot create a non-anonymous symbol inside a
>> type-function, because there is no way to infer a mangle.
>>
>> You can however create an anonymous symbol and alias it inside
>> a template body, which gives it a mangle and it can behave
>> like a regular symbol.
>
> Interesting. Is it possible to assign a "fake" mangle to type
> functions that never actually gets emitted into the object
> code, but just enough to make various internal compiler stuff
> that needs to know the mangle work properly?
No this is not possible, a symbol which is only used at
compile-time is actually really rare. Actually If the symbol is
constrained to a compile-time only context (e.g. inside is() or
taking the .sizeof) this problem does not arise, and it could be
allowed.
Imagine you want to return a struct type which has all the
fields of a given base struct but adds a member.
>> module ct_helper;
> alias f(alias baseT, alias newMemberType, string newMember_name)
> {
> struct Extended
> {
> baseT base;
> mixin("newMemberType " ~ newMemberName);
> }
> return typeof(Extended.init);
>}
------
>> module user
struct S1 { int x; }
alias S2 = f!(S1, float, "y") // looks like a
template-instantiation but it's not!, I am just reusing it, to
not confuse the parser to much.
which mangle should this get?
S2 ? - doesn't work there is no mangle for an alias.
ct_helper.f.Extended? doesn't work if we call the type-function
again with diffrent arguments
make it an anonymous type ? - If we do that than this means that
the type-function is no longer pure as two anonymous types can
never Equal each other
include the arguments to the type-function and it's parameters in
the mangle? - that's possible but type-functions are not meant to
leave any sign of their existence in order to not introduce ABI
issues.
In short for now I'd rather side-step the problem by not allowing
freshly minted types to escape into a runtime context without
going through a template wrapper (which also handles caching and
has proper behavior in is-expressions).
More information about the Digitalmars-d-announce
mailing list