Lvalue pour valider la liaison de référence

Le compilateur garde de se plaindre, je suis en train de lier une lvalue de référence rvalue, mais je ne vois pas comment. Je suis novice en C++11, la sémantique de déplacement, etc., donc, s'il vous plaît garder avec moi.

J'ai cette fonction:

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.
}

qui appelle cette méthode:

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

Je continue à recevoir des erreurs comme suit:

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

sur l'Insert (). N'est-ce pas key définie comme une rvalue dans la surcharge de l'opérateur? Pourquoi est-il d'être réinterprétée comme une lvalue?

Grâce.

source d'informationauteur Kristian D'Amato