TemplateOf behavior
Alex
sascha.orlov at gmail.com
Sat Jan 6 23:12:31 UTC 2018
On Saturday, 6 January 2018 at 22:25:48 UTC, ag0aep6g wrote:
> On Saturday, 6 January 2018 at 19:58:10 UTC, Alex wrote:
> ----
> template T(alias S)
> {
> struct T
> {
> this(int dummy)
> {
> static assert(__traits(isSame, TemplateOf!(T!arr),
> T));
> }
> }
> }
> ----
>
> Now it's a bit more obvious why the assert fails. At the
> location of the assert, `T` refers to the struct, not the
> template. To refer to the template, you can prepend a dot,
> which means that the lookup is done at the module level instead
> of searching upwards from the local level [1]. Like so:
>
> ----
> static assert(__traits(isSame, TemplateOf!(.T!arr), .T));
> ----
>
> You don't actually need the dot with `T!arr`. The compiler is
> apparently smart enough to figure out that you mean the
> template in that case. But it doesn't hurt, either.
>
>
> [1] https://dlang.org/spec/module.html#module_scope_operators
Ah... thanks!
I chose the other way round, and compare typeof(this) directly
now.
My false reasoning was, that template parameters are merged to
the type before analyzing the types itself.
More information about the Digitalmars-d-learn
mailing list