Why is Phobos `Flag` so overthought ?

Dukc ajieskola at gmail.com
Wed May 8 11:02:20 UTC 2024


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.


More information about the Digitalmars-d-learn mailing list