import std.traits; void main() { const wchar* t; unqual(t); }
auto ref unqual(T)(ref T value) { return cast(Unqual!T)value; } I've attempted to create myself an unqual function which could for example do a cast from const char* to char*. The above won't work though: test.d(14): Error: variable test.unqual!(const(char*)).unqual.value cannot modify const It does work if I only use auto: auto unqual(T)(ref T value) { return cast(Unqual!T)value; } But that creates an rvalue. I wanted to use such a function to avoid doing explicit casts to get an unqualified type. For example a C function might be prototyped as: foo(char* input); You can't pass a const char* here, so you would have to either cast the type: const char* str; foo(cast(char*)str); Or you would modify the prototype to: foo(const(char)* input); foo(str); // now ok The second choice is probably the best, since this specific C function would not actually modify the input. But I thought having an "unqual" function would be handy, so I could use: foo(unqual(str));