[Issue 17974] getSymbolsByUDA is returns unusable symbols when used in foreach
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Nov 9 03:03:24 UTC 2017
https://issues.dlang.org/show_bug.cgi?id=17974
Basile B. <b2.temp at gmx.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |b2.temp at gmx.com
--- Comment #2 from Basile B. <b2.temp at gmx.com> ---
(In reply to Artem Borisovskiy from comment #1)
> What I meant to say is that it can't even access the symbol to test if it
> has the attribute. Anyway, here's some more funny (not so at work) stuff:
>
> // main.d
> import std.traits;
> enum Attr;
>
> static struct FUBAR
> {
> @Attr int a;
> void dummy()
> {
> static foreach (symbol; getSymbolsByUDA!(FUBAR, Attr))
> pragma(msg, getUDAs!(symbol, Attr).stringof);
> }
> }
>
> void main()
> {
> static foreach (symbol; getSymbolsByUDA!(FUBAR, Attr))
> pragma(msg, getUDAs!(symbol, Attr).stringof);
> }
>
> Now I'm lost:
>
> src/main.d(10): Error: value of 'this' is not known at compile time
> ()
> (Attr)
>
> But if I make `dummy' static, it works:
> (Attr)
> (Attr)
>
> The loop works even on module level (as it should). So it doesn't work only
> in non-static methods of FUBAR.
---
import std.traits;
enum Attr;
struct FUBAR
{
@Attr int a;
void dummy()
{
foreach (i, symbol; getSymbolsByUDA!(FUBAR, Attr))
pragma(msg, getUDAs!(getSymbolsByUDA!(FUBAR, Attr)[i], Attr));
}
void dummy2()
{
static foreach (i; 0..getSymbolsByUDA!(FUBAR, Attr).length)
pragma(msg, getUDAs!(getSymbolsByUDA!(FUBAR, Attr)[i], Attr));
}
}
void main()
{
static foreach (symbol; getSymbolsByUDA!(FUBAR, Attr))
pragma(msg, getUDAs!(symbol, Attr).stringof);
}
---
Good luck.
--
More information about the Digitalmars-d-bugs
mailing list