Error: 'this' is only defined in non-static member functions, not main
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Jul 29 15:12:36 PDT 2015
On Wednesday, 29 July 2015 at 21:33:16 UTC, remi thebault wrote:
> Hello
>
> I have this weird error trying to achieve something simple:
That's far from simple.
Here's a reduction:
----
template wl_container_of(alias member)
{
size_t get() {return member.offsetof;}
}
struct item { int link; }
void main()
{
wl_container_of!(item.link).get(); /* Error: 'this' is only
defined in non-static member functions, not main */
}
----
I'm not sure what's going on here, if this should or shouldn't
work. The error message isn't exactly good.
Slapping `static` on `get` seems to make it work:
----
static size_t get() {return member.offsetof;}
----
I guess the compiler thinks that since `item.link` is an instance
member, it needs a `this`. And then `get` would need a `this` too
as it's using `item.link` via `member`. When the compiler sees
that there is no `this`, it errors out.
An explicit `static` forces the compiler to assume no `this`. And
it would error out if you actually tried to make use of it.
Naively, I'd think the compiler should be able to figure that out
itself.
More information about the Digitalmars-d-learn
mailing list