Nick Treleaven kirjoitti 8.5.2024 klo 13.24:
On Wednesday, 8 May 2024 at 04:27:13 UTC, cc wrote:
It doesn't allow a simple boolean to be used as an argument, or any
other Flag as they are different instantiations of a template rather
than equivalent aliases.
It is however awful, cumbersome, annoying design and needs to be
completely phased out now that we have named arguments.
Flag enforces that the argument says what it relates to. `true` does not
say what it relates to. Named arguments are optional, so I don't see how
they could make Flag redundant.
Well,
```D
private struct Undefinable{}
auto functionTakingFlags
( int normalArg,
Undefinable = Undefinable.init,
bool Flag1,
Undefinable = Undefinable.init,
bool Flag2
){ // fun body...
}
```
As I understand it, this forces the client to use named arguments
because they would be trying to pass an `Undefinable` otherwise. They
probably could pass `Undefinable` if they really wanted and therefore
avoid using named args but they wouldn't do that accidentally.
Whether that is any better than the library `Flag` type is up to taste.