On Friday, 3 August 2012 at 22:50:54 UTC, David Nadlinger wrote:
On Friday, 3 August 2012 at 22:44:28 UTC, Andrej Mitrovic wrote:
In fact, this should really be put into Phobos so everyone can
benefit rather than implementing this internally as a private
template of bitmanip.
No, it shouldn't be. There are almost no legit use cases for
it, and having it in the library encourages abuse of string
mixins/stringof in cases like this one.
Then doesn't it seem like we're missing a potentially important
piece of the puzzle for mixins and templates? very likely my
modified template will include you including the same variable
twice, but if someone gets lazy then it may not work.
mixin(bitfieldsOn!("SomeVariable", SomeVariable, /*stuff*/));
// or
mixin(bitfieldsOn!("SomeVariable", variable type, /*stuff*/));
But if it comes to it, what if they use auto or point to
something else just to make it shut up? Constraints will let it
pass but the code will pop up with errors that may not be
reasonably readable.
long l;
float fl;
mixin(bitfieldsOn!("fl", l, /*stuff*/)); //by name, typo or lazy
//or
mixin(bitfieldsOn!("fl", auto, /*stuff*/)); //explicit type,
lazy or lying
Now the checks pass but the compile code works wrong.
True I can add asserts as part of the output code, but as
mentioned hopefully the constraints could do that work, plus
adding extra checks as part of a mixin seems a little...
excessive.
Let's assume we use 'localStringof' or 'callingStringof' and
that it returns the string of how the variable is
called/referenced; Give me some examples how it would be abused
or used wrongly? Aliased variables are pretty much perfect
forwarded in templates (Unless my understanding is off) so they
would carry that information forward.