void f() pure nothrow @nogc { void localFunc() { } localFunc(); } Complains because localFunc is not @nogc or nothrow. Doesn't complain about pure though. Is it reasonable to say that the scope of the outer function is nothrow+ at nogc, and therefore everything declared within should also be so?