Lvalue para desvalorizar a ligação de referência

O compilador continua reclamando que estou tentando ligar um lvalue a uma referência rvalue, mas não consigo ver como. Sou novo no C ++ 11, movo a semântica, etc., por favor, tenha paciência comigo.

Eu tenho essa função:

template <typename Key, typename Value, typename HashFunction, typename Equals>
Value& FastHash<Key, Value, HashFunction, Equals>::operator[](Key&& key)
{
    //  Some code here...

    Insert(key, Value()); // Compiler error here

    //   More code here.
}

que chama esse método:

template <typename Key, typename Value, typename HashFunction, typename Equals>
void FastHash<Key, Value, HashFunction, Equals>::Insert(Key&& key, Value&& value)
{
    // ...
}

Eu continuo recebendo erros como o seguinte:

cannot convert argument 1 from 'std::string' to 'std::string &&'

na chamada Insert (). Não ékey definido como um rvalue na sobrecarga do operador? Por que está sendo reinterpretado como um lvalue?

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion