On 5/11/20 11:11 AM, Shigeki Karita wrote:
Why is local struct visible in this outer template, while local class is not?

https://wandbox.org/permlink/MfsDa68qgaMSIr4a

https://dlang.org/spec/template.html#instantiation_scope

---

enum p(T) = __traits(compiles, new T());

class GlobalC {}
struct GlobalS {}

void main()
{
     class LocalC {}
     static assert(p!GlobalC);
     static assert(!p!LocalC);

     struct LocalS {}
     static assert(p!GlobalS);
     static assert(p!LocalS); // ??
}


First, it actually does compile, I think because the compiler recognizes that LocalS is POD (plain old data), without methods, so it doesn't need a context pointer.

e.g.:

auto make(T)() { return new T(); }

...

auto x = make!LocalS; // ok

If you add a method to LocalS, then make!LocalS fails to compile. However, strangely, p!LocalS still returns true, I think that is an error.

-Steve

Reply via email to