Why is my @pure function @system when placed in a struct?
ag0aep6g
anonymous at example.com
Wed Feb 27 18:32:19 UTC 2019
On 27.02.19 19:10, Dukc wrote:
> I tested a bit, and it appears that attribute inference is not done at
> all for templates inside structs -the attribute need not be a delegate:
>
> struct S
> {
> static int fImpl(Ret)() { return Ret.init; }
>
> pragma(msg, __traits(getFunctionAttributes, fImpl!int)); //
> still tells us: `f` is @system
> }
>
> void main(){}
>
> A bug, unless I'm overlooking something.
It's not quite as simple as that. When you put the pragma in a function,
the inferred attributes show up:
----
struct S
{
void f()() {}
}
pragma(msg, __traits(getFunctionAttributes, S.f!())); /* @system */
void g()
{
pragma(msg, __traits(getFunctionAttributes, S.f!()));
/* Same line now says @safe. */
}
----
But I agree that this can't be right.
More information about the Digitalmars-d-learn
mailing list