`printName(alias var)()` is not a great solution, eg: doesn't work with expressions, doesn't work with variadics, introduces template bloat.
https://github.com/dlang/dmd/pull/7821 introduces __traits(getCallerSource, symbol) which will allow what you want. On Sun, Mar 4, 2018 at 1:53 PM, bauss via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: > On Sunday, 4 March 2018 at 21:48:53 UTC, JN wrote: >> >> On Sunday, 4 March 2018 at 21:12:44 UTC, arturg wrote: >>> >>> >>> you can pass it by alias: >>> >>> import std.stdio; >>> >>> void main(string[] args) >>> { >>> int x; >>> printName!(x); >>> } >>> >>> void printName(alias var)() >>> { >>> writeln(__traits(identifier, var), " ", var); >>> } >> >> >> Well, it works. But I am confused now, why. Isn't alias only for types >> (like a typedef)? Why can we use it for variable here? > > > Because it is what it is, an alias. Not a type. > > It can be a type, expression or member/variable.