Dans le code ci-dessous:problème étrange avec la conversion
template<class Key, class Value>
class Pair
{
private:
std::pair<Key,Value> body_;
public:
//No cpy ctor - this generated by compiler is OK
Pair(Key&& key,Value&& value)
{
body_.first = key;
body_.second = value;
}
Pair(Pair<Key,Value>&& tmpPattern)
{
body_.swap(tmpPattern.body_);
}
Pair& operator=(Pair<Key,Value> tmpPattern)
{
body_.swap(tmpPattern.body_);
return *this;
}
};
template<class Key, class Value>
Pair<Key,Value> MakePair(Key&& key, Value&& value)
{
return Pair<Key,Value>(key,value);
}
Pour une raison bizzare je reçois une erreur lorsque je tente de lancer MakePair, pourquoi? Dieu sait ...
int main(int argc, char** argv)
{
auto tmp = MakePair(1, 2);
}
C'est cette erreur:
erreur Erreur C2665: Paire :: Paire ': aucun des 3 pourrait convertir tous les surcharges les types d'arguments
Je ne juste' t comprendre quelle conversion il doit y avoir?
Avec '&&', n'est-il pas nécessaire que les paramètres de la fonction soient des références? –
@Victor, non '&&' peut prendre des valeurs –
Quoi qu'il en soit, cela compile bien pour moi sur GCC 4.3.2. Cependant, comme il n'y a pas encore de support pour 'auto', j'ai dû le remplacer par' Pair tmp = MakePair (1, 2) '. Pourrait-il être votre compilateur a tout simplement un bug C++ 0x support? –