The trouble is that D's semantic code simply does not support non-transitive const, this is worked fundamentally into the type system. Any other method I can think of is going to have seams and warts.