Forgot to mention, currently as workaround I use templates: T Create(T)() { // ... some init code return new T(init_result); } auto f = Create!(Foo)(); // f is instance of Foo auto b = Create!(FooBar)(); // b is instance of FooBar But `FooBar.create()` me like much better =) -- serg.