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