On Sunday, 8 June 2014 at 18:48:03 UTC, monarch_dodra wrote:
Mixin templates can only insert declarations, not arbitrary code. When it sees "scope", it's expecting it to be the attribute, not the declaration.

To add to that, if you want to mixin arbitrary code, then you can use a string mixin:

template declare_bar(string var_name) {
  enum declare_bar =
    "auto " ~ var_name ~ " = c_make();" ~
    "scope(exit) if(" ~ var_name ~ ") c_free(" ~ var_name ~ ");"
}

void main() {
    mixin(declar_var!"b")
}

For example.

That said, given your example, simply using an RAII wrapper *could* be superior (depends on your actual usecase).

Reply via email to