Que compilador está certo? 'modelo' antes de ser necessário o tipo de retorno modelado?

Este snippet (Tirado deessa questã) compila bem com g ++ (como visto), desde que otemplate antes que o tipo de retorno esteja lá. Por outro lado, o VC10 não compila esse código com o seguinte erro:

erro C2244: 'A :: getAttr': incapaz de corresponder a definição de função a uma declaração existente

Se eu remover otemplate, VC10 está feliz, mas o g ++ grita este erro:

error: não-modelo 'AttributeType' usado como modelo
note: use 'A :: template AttributeType' para indicar que é um modelo

É novamente por causa da pesquisa de duas fases interrompida do VC ou qual é a causa? Qual compilador está aqui? Eu suspeito que o g ++ esteja correto, pois tenho uma vaga memória detemplate sendo necessário aqui, como com orebind modelo dentro dos alocadore

Edita: Temos um vencedor: g ++ / GCC (surpresa surpresa ...

template <typename T, typename K>
class A {
public:
    T t;
    K k;

    template <int i, int unused = 0>
    struct AttributeType{
    };

    template <int i>
    AttributeType<i> getAttr();

};

template <typename T, typename K>
template <int i>
typename A<T, K>::template AttributeType<i> A<T, K>::getAttr() {
//                ^^^^^^^^ -- needed or not?
    return t;
}


int main(){
    A<int,int> a;
}

questionAnswers(1)

yourAnswerToTheQuestion