void main() @nogc { import std.range: stride; int[] a; a.stride(2); } dmd 2.066beta gives: test.d(4,13): Error: @nogc function 'D main' cannot call non-@nogc function 'std.range.stride!(int[]).stride' Currently std.range.stride is not @nogc just because of this enforce: auto stride(Range)(Range r, size_t n) @nogc if (isInputRange!(Unqual!Range)) { import std.exception : enforce; enforce(n > 0, "Stride cannot have step zero."); ... The given code compiles if you replace the enforce with: immutable static exc = new Exception("Stride cannot have step zero."); if (n == 0) throw exc; But look at the comment by monarchdodra in Issue 12768 .