Here is a class with a templated opIndex method, and an attempt to use it:

class Test
{
        int[] numbers = [1, 2, 3];
        string[] texts = ["a", "b", "c"];
        
        Type opIndex(Type)(int index)
        {
                static if (is(Type == int))
                        return numbers[index];
                static if (is(Type == string))
                        return texts[index];
        }
}

void main()
{
        auto test = new Test();
        
        auto number = test[0]!int; // does not compile, syntax error
        auto number = test!int[0]; // does not compile, syntax error

        int number = test[0]; // does not compile, cannot deduce type
}


So it is possible to define a templated opIndex method in a class, but is it possible to use it? If not, should it be allowed to create templated opIndex methods?

Reply via email to