My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

but I have never declared a const of that type nor have I used typeid explicitly in my program. Where is this coming from?

The program is just:

enum AddrSpace {
    Global,
    Shared
}
struct Pointer(AddrSpace n,T)
{
    T* ptr;
}
private import std.traits;
struct AutoIndexed(T) if (isInstanceOf(T,Pointer))
{
    T p = void;
    enum  n = TemplateArgsOf!(T)[0];
    alias U = TemplateArgsOf!(T)[1];
    static assert(n == AddrSpace.Global || n == AddrSpace.Shared);

    @property U index()
    {
        static if (n == AddrSpace.Global)
            return p[0]; //Some calculation
        else static if (n == AddrSpace.Shared)
            return p[0];// ditto

    }

    @property void index(U t)
    {
        static if (n == AddrSpace.Global)
            p[0] = t; // ditto
        else static if (n == AddrSpace.Shared)
            p[0] = t; // ditto
    }
    @disable this();
    alias index this;
}

alias aagf = AutoIndexed!(GlobalPointer!(float));

@kernel void auto_index_test(aagf a,
                             aagf b,
                             aagf c)
{
    a = b + c;
}

Reply via email to