On 20.4.2012 16:09, Timon Gehr wrote: Thanks Timon for the answer.
>> My questions are following: >> - can mixin templates be used this way? > > They can only mixin declarations. > >> - why are they complaining? > > Because if is a statement and not a declaration. Ok. >> - is there a better way to do this other than reproducing C macros? >> > > Inline EXPOSE_INTERFACE into EXPOSE_INTERFACES and it'll work. I tried but it still refuses to compile: string interfaceGuid(string ifaceName) { return ifaceName ~ "Guid"; } mixin template EXPOSE_INTERFACES(T...)(T args) { void QueryInterface(ref IComponent comp, string guid) { foreach (arg; args) { if (mixin(interfaceGuid(arg)) == guid) {} } } } component.d(6): members of template declaration expected component.d(6): Declaration expected, not '(' component.d(10): no identifier for declarator args component.d(10): semicolon expected, not ')' component.d(10): Declaration expected, not ')' I am compiling it with dmd v2.058. Martin