The code below shouldn't compile, but does. The postblit function is obviously not pure, but pure code is allowed to call it. Interestingly, marking the postblit as pure explicitly causes it to no longer compile. -------------------------------- struct Struct(T) { this(this) { import std.stdio; writeln("oops"); } } void fun(Struct!int s) pure; void gun() pure { fun(Struct!int()); } --------------------------------