These all need to be: const pure nothrow @safeUnless this is done, the utility of const, pure, nothrow and @safe is rather crippled.Any reason why they shouldn't be?One reason is memoization, aka lazy initialization, aka logical const. I don't believe these are worth it. If you must do it inside those functions (and functions that override them), you're on your own to make it work right (use unsafe casts, etc.).
+1