A simple workaround is an unsafe wrapper: struct Unsafe { private T a; T get() @system { return a; } } struct IntSlice { private Unsafe!(int*) ptr; private Unsafe!size_t length; ...