This code works:
struct None {}
struct Option(T) {
bool hasSome;
T value;
this(None) {}
this(T v) {
hasSome = true;
value = v;
}
}
Option!int a = 123; // automatically constructs an Option!int from a bare int
Option!int b = None(); // same as above but with None
but this doesn't:
Option!int something() {
return None(); // Error: cannot implicitly convert expression `None()` of type `None` to `Option!int`
}
This kind of prevents ergonomic code like the above. Instead you have to use a function like Option!T None(T)() => Option!T()
and then you have to repeat yourself with return None!int
and etc... it's quite annoying :(
In C++ you may do this fairly easily, but of course there are various pitfalls because it's C++. But at least you can opt out with explicit
most of the time.
Thanks in advance!