Thread overview
mixin template can't contain statements: workaround?
Mar 15, 2015
Timothee Cour
Mar 15, 2015
Meta
Mar 15, 2015
ketmar
Mar 15, 2015
ketmar
March 15, 2015
Why can't we allow mixin templates to contain statements, as is the case
for regular mixins?
Is there a workaround?

here's a dummy example:

template mixin Foo{
 //some statement, eg: 'return;'
}

void fun(){
  mixin Foo;
}

Note that I can do this with a regular mixin, but template mixins are cleaner (esp in more complex examples).


March 15, 2015
On Sunday, 15 March 2015 at 01:20:55 UTC, Timothee Cour wrote:
> Why can't we allow mixin templates to contain statements, as is the case
> for regular mixins?
> Is there a workaround?
>
> here's a dummy example:
>
> template mixin Foo{
>  //some statement, eg: 'return;'
> }
>
> void fun(){
>   mixin Foo;
> }
>
> Note that I can do this with a regular mixin, but template mixins are
> cleaner (esp in more complex examples).

Wouldn't the most basic explanation be that templates cannot contain statements, therefore mixin templates can't either?
March 15, 2015
On Sat, 14 Mar 2015 18:20:47 -0700, Timothee Cour via Digitalmars-d-learn wrote:

> Why can't we allow mixin templates to contain statements, as is the case
> for regular mixins?
> Is there a workaround?
> 
> here's a dummy example:
> 
> template mixin Foo{
>  //some statement, eg: 'return;'
> }
> 
> void fun(){
>   mixin Foo;
> }
> 
> Note that I can do this with a regular mixin, but template mixins are cleaner (esp in more complex examples).

template Foo(int a, string b) {
  import std.format : format;
  enum Foo = q{
    {
      import std.conv : to;
      return %2$s+to!string(%1$s);
    }
  }.format(a, b.stringof);
}

positional args, syntax highlighting, usage like `mixin(Foo!(42, "z"));`.
maybe this will help.

March 15, 2015
On Sun, 15 Mar 2015 13:28:33 +0000, ketmar wrote:

> template Foo(int a, string b) {
>   import std.format : format;
>   enum Foo = q{
>     {
>       import std.conv : to; return %2$s+to!string(%1$s);
>     }
>   }.format(a, b.stringof);
> }
> 
> positional args, syntax highlighting, usage like `mixin(Foo!(42,
> "z"));`.
> maybe this will help.

ah, that `+`... ;-)