Why would this be needed? With ldc -O3 the test function can be completely erased: import std; void main() { Foo foo = new Foo; foo.x = 7; test(foo); } void test(Foo foo) { writeln(foo.get); } class Foo { int x; int get() { return x; } }