Hello,

I'm having a weird case of access violation.

I tried to narrow the problem and put up a reproducible testCase on compilerexploer, but it requires my framework too which overrides std.stdio.writeln() in order to produce colorful text, and logging, etc.

The error is an access violation when I access the struct in the f() function.

Sometimes it can be fixed (marked the place.)

In one sentence: It is an aligned struct field, whose struct is given to a class as a template parameter.

Maybe the weirdness is caused by the align(16)? When the fields of the struct are placed on the instance of the class?

I know it's not reproduceable, maybe it was a bug that had been already fixed. So I only ask if the situation is familiar to someone, please tell me, what tricks I need to avoid.

I can avoid the align using dummy fields.
I can allocate the struct with new.
But it's a bummer, that the nicest version is unstable.

```
import het;

struct S
{
        int a;
        align(16)//<-this triggers it
        int[4] b;
}

class A(T)
{
        version(none)
        { T u; }
        else
        {
T* p; //<- this fixes it. (The struct is not on the class surface)
                ref u() { return *p; }
                this() { p = new T; }
        }
}

class B: A!S
{ void f() { writeln(u.text/+<-The access violation can be here+/); } }

void main()
{
        //writeln("a"); <- this fixes it
        auto b = new B; //<-scoped! can trigger it too
        b.f;
}
```

Thank You in advance.

Reply via email to