digitalmars.D.learn - Conflicting UDA
- =?UTF-8?B?TcOhcmNpbw==?= Martins (28/28) Feb 06 2016 I came across an issue with UDAs and was wondering if there
- Marc =?UTF-8?B?U2Now7x0eg==?= (4/20) Feb 06 2016 `@(mylib.ignore)` should work. You could open an enhancement
- =?UTF-8?B?TcOhcmNpbw==?= Martins (3/8) Feb 06 2016 Thanks, that does work indeed and is not that verbose...
I came across an issue with UDAs and was wondering if there
really is no way or if I just missed something...
Basically, my library has an ignore UDA, which conflicts with
vibe.d's vibe.data.serialization.
If both mine and vibe's module are imported, DMD will fail with a
very non-descriptive error message, seen below... The obvious
solution would be to prefix my UDAs, but then I suppose every
library writer would have to abide by this convention, which in
practice won't happen, and would bring us back to the C-style
redundant symbol names all over. It's unpleasant to have to
disambiguate even when not necessary... I suppose I could also do
mylibattr("ignore") instead, but this is also hideous and overly
verbose...
I tried mylib.ignore, which would not be too bad, if necessary
only to disambiguate, but it seems like the parser doesn't
understand it.
struct Score {
uint id;
ulong score;
ignore ulong score2 = 10; // Error: expression ignore is void
and has no value
}
static assert(hasUDA!(Score.score2, IgnoreAttribute));
Something like would be intuitive:
mylib.ignore vibe.ignore std.somemodule.ignore ulong score2 =
10;
What are other people doing to go around this? To me, this seems
like a major UDA usability issue for library writers in the wild.
Feb 06 2016
On Saturday, 6 February 2016 at 13:36:32 UTC, Márcio Martins
wrote:
I came across an issue with UDAs and was wondering if there
really is no way or if I just missed something...
Basically, my library has an ignore UDA, which conflicts with
vibe.d's vibe.data.serialization.
If both mine and vibe's module are imported, DMD will fail with
a very non-descriptive error message, seen below... The obvious
solution would be to prefix my UDAs, but then I suppose every
library writer would have to abide by this convention, which in
practice won't happen, and would bring us back to the C-style
redundant symbol names all over. It's unpleasant to have to
disambiguate even when not necessary... I suppose I could also
do mylibattr("ignore") instead, but this is also hideous and
overly verbose...
I tried mylib.ignore, which would not be too bad, if necessary
only to disambiguate, but it seems like the parser doesn't
understand it.
` (mylib.ignore)` should work. You could open an enhancement
request to enable the paren-less syntax.
Feb 06 2016
On Saturday, 6 February 2016 at 15:01:44 UTC, Marc Schütz wrote:On Saturday, 6 February 2016 at 13:36:32 UTC, Márcio Martins wrote:Thanks, that does work indeed and is not that verbose... Cheers![...]` (mylib.ignore)` should work. You could open an enhancement request to enable the paren-less syntax.
Feb 06 2016








=?UTF-8?B?TcOhcmNpbw==?= Martins <marcioapm gmail.com>