cym13 wrote: > Note that parentheses are optional when no argument is provided.
Yes I know that but the point is I expected the compiler to identify ta!"string" to refer to a different symbol than ta("string") where the one is obviously a template and the other is obviously a function call. The fact that parantheses are optional for invocations of zero-arity functions or for templates taking a single argument or able to infer its arguments is irrelevant. Anyhow, this is all moot, since actually the compiler *is* able to make the difference at the point of invocation and the problem was just a limitation in name lookup within the template itself: string ta(string s) { return s ~ "1"; } template ta(string s) { enum ta = .ta(s); } void main() { import std.stdio; writeln(ta("a"), ' ', ta!"b"); } outputs a1 b1 as expected. Filed https://issues.dlang.org/show_bug.cgi?id=15764 just for the record. -- Shriramana Sharma, Penguin #395953