This is one of the largest problems left in the implementation of D purity: https://issues.dlang.org/show_bug.cgi?id=9148 One example of the refused code: void foo(const int[] a) { int bar() pure { return a[0]; } } void main() {} Bye, bearophile