Derived type
Basile B.
b2.temp at gmx.com
Wed Mar 31 12:09:33 UTC 2021
On Wednesday, 31 March 2021 at 04:49:50 UTC, novice3 wrote:
> On Tuesday, 30 March 2021 at 21:53:34 UTC, Basile B. wrote:
>> struct Typedef(TBase)
>> {
>> TBase payload;
>> alias payload this;
>> }
>>
>> alias Xobj = Typedef!(void*);
>
> This is how std.typecons.Typedef made, IMHO.
>
> The problem is this code generate struct with name
> "Typedef!(void*)",
> then compiler show this name (not "Xobj") in messages:
>
> https://run.dlang.io/is/eEI2yC
>
> void* bad;
> foo(bad);
>
> Error: function foo(Typedef!(void*) obj) is not callable using
> argument types (void*)
> cannot pass argument bad of type void* to parameter
> Typedef!(void*) obj
yeah template instances are identified using the parameters
identifiers, then the alias is just a syntactic shortcut to that,
not producing a new symbol with a unique mangle... but the
message is correct assuming you want void* to be rejected.
That being said you can still use a string mixin if the messages
have to be correct
---
string genTypeDef(TBase)(string name)
{
return "struct " ~ name ~ "{" ~ TBase.stringof ~ " payload;
alias payload this;}";
}
mixin(genTypeDef!(void*)("Xobj"));
void foo (Xobj obj) {}
---
More information about the Digitalmars-d-learn
mailing list