After some time with D, C++ is now a nightmare for me. (especially on generic coding) Think about replicating this simple code in C++. void fun(T)(T a) { static if(cond(T)) { auto var = make(a); } else { auto tmp = make(a); auto var = make_proxy(tmp); } ... } And this is just "one" condition. Damn D for introducing these and damn C++ committee for not adopting.