On Sunday, 25 June 2017 at 15:58:48 UTC, Johan Engelen wrote:
[...]
If version(X) is not defined, there should be no call and no
extra code at -O0.
[...]
In C, you could do something like:
```
#if X
void foo() {......}
#else
#define foo()
#endif
```
How would you do this in D?
By requiring the compiler to inline the empty foo:
```
version (Foo)
{
void foo()
{
import std.stdio;
writeln("foo");
}
} else {
pragma(inline, true)
void foo() {}
}
void main(string[] args)
{
foo();
}
```
See [1] for full assembly, shortened output as follows:
```
void example.foo():
ret
_Dmain:
xor eax, eax
mov qword ptr [rsp - 16], rdi
mov qword ptr [rsp - 8], rsi
ret
```
As you can see, while the code for the function itself will still
be emitted, since it's empty the inlining will result in no
instructions as the result.
[1] https://godbolt.org/g/RLt6vN