我可以通过version(DMD){}
测试DMD是否编译了给定的代码,但是如何检查它的版本?(2.66/2.65等)
更简洁地说,我想检查@nogc
修饰符是否存在,如果不存在,则定义一个虚拟的修饰符。
我想出了一个解决办法:
static if(!__traits(compiles, ()@nogc{}))
{
struct nogc;
}
但是有更好的方法吗?例如,直接检查该特定修饰符的存在性?
我可以通过version(DMD){}
测试DMD是否编译了给定的代码,但是如何检查它的版本?(2.66/2.65等)
更简洁地说,我想检查@nogc
修饰符是否存在,如果不存在,则定义一个虚拟的修饰符。
我想出了一个解决办法:
static if(!__traits(compiles, ()@nogc{}))
{
struct nogc;
}
您可以使用预定义的__VERSION__
常量。
此外,还可以使用std.compiler模块(具体来说是version_major
和version_minor
)来更轻松地使用它。
然而,您的解决方法可能是更好的方法。即使对于发布版本之间的编译器构建,它也能使代码正确地工作。