Ambiguidade do operador C ++

Perdoe-me, pois sou bastante novo em C ++, mas estou tendo alguns problemas em relação à ambiguidade do operador. Eu acho que é específico do compilador, para o código compilado na minha área de trabalho. No entanto, ele não consegue compilar no meu laptop. Acho que sei o que está acontecendo de errado, mas não vejo uma maneira elegante de contornar isso. Informe-me se estou cometendo um erro óbvio. De qualquer forma, aqui está o que estou tentando fazer:

Eu criei minha própria classe de vetor chamada Vector4, que se parece com isso:

class Vector4
{
 private:
   GLfloat vector[4];
 ...
}

Então eu tenho esses operadores, que estão causando o problema:

operator GLfloat* () { return vector; }

operator const GLfloat* () const { return vector; }

GLfloat& operator [] (const size_t i) { return vector[i]; }

const GLfloat& operator [] (const size_t i) const { return vector[i]; }

Eu tenho o operador de conversão para que eu possa passar uma instância da minha classe Vector4 para o glVertex3fv e possuo uma assinatura por motivos óbvios. No entanto, as chamadas que envolvem a assinatura do Vector4 tornam-se ambíguas para o compilador:

enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);

glTranslatef(v[x], v[y], v[z]);

Aqui estão os candidatos:

candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>

Por que ele tentaria converter meu Vector4 em um GLfloat * primeiro quando o operador subscrito já está definido no Vector4? Existe uma maneira simples de contornar isso que não envolve a conversão de texto? Estou apenas cometendo um erro bobo? Agradeço por qualquer ajuda desde já.

questionAnswers(3)

yourAnswerToTheQuestion