Tomek S.: > You can do: > > class C { > version(unittest) int temp; > invariant() { > // use temp > } > } > > Or am I missing something?
D2 has several ways to perform conditional compilation, so you may implement hand-made ghost fields using a version(debug). And ghost fields are very important to start with (I was not sure to submit an enhancement request). There are two things that maybe you are missing. A field like: version(unittest) int temp; gets compiled when you use the -unittest, and gets removed otherwise. While the presence of ghost fields is determined by the presence of active contracts, that currently are run with the code is compiled in non-release build (so they are not related to the -unittest switch). The second problem is that inside a method foo() of that class C you may write: void foo() { version(unittest) temp++; } But well implemented ghost fields are never visible inside the body of methods. So if you try to use them inside foo() the compiler has to raise a compile error. Bye, bearophile