我有一个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)
你可以做
static assert(0, "Invalid args!");
Run Code Online (Sandbox Code Playgroud)
而不是pragma msg.静态断言就像assert
,只是编译时间,它不会在发布模式下被删除,因为它只在编译时检查而不包含在编译代码中.