mixin模板:如何暂停编译?

Tam*_*mas 2 templates d

我有一个mixin模板,只对某些参数有效.如果参数无效,我想用错误消息暂停编译.对于我使用的模板,assert(false, "Invalid args for Yoo")但这不适用于mixin模板.如何停止以下示例的编译?

mixin template Yoo(args...) {
  static if (args.length == 0) {
    pragma(msg, "Invalid args! (how to halt the compilation?)");
  } else {
    pragma(msg, "Valid args:", args);
  }
}

void main() {
  mixin Yoo;
  mixin Yoo!(1,2,3);
}
Run Code Online (Sandbox Code Playgroud)

Web*_*001 5

你可以做

static assert(0, "Invalid args!");
Run Code Online (Sandbox Code Playgroud)

而不是pragma msg.静态断言就像assert,只是编译时间,它不会在发布模式下被删除,因为它只在编译时检查而不包含在编译代码中.