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