On Wednesday, 20 November 2013 at 18:30:58 UTC, Dmitry Olshansky
wrote:
20-Nov-2013 22:01, Simen Kjærås пишет:
On 20.11.2013 18:45, Simen Kjærås wrote:
[snip]
May I suggest:
struct Validated(alias fn, T) {
private T value;
@property inout
T get() {
return value;
}
Uh-hm. Add this:
alias get this;
And it decays to the naked type in a blink of an eye. And some
function down the road will do the validation again...
}
Validated!(fn, T) validate(alias fn, T)(T value) {
Validated!(fn, T) result;
fn(value);
result.value = value;
return result;
}
void
functionThatTakesSanitizedFileNames(Validated!(sanitizeFileName,
string) path) {
// Do stuff
}
Yes. It is very important not to allow direct access to the
underlying value. This is important for ensuring that it is not
put in an invalid state. This is a mistake that was made with
std.typecons.Nullable, making it useless for anything other than
giving a non-nullable type a null state (which, in fairness, is
probably all that it was originally intended for).