Merci joe_link_noir, gbdivers et romantik , bacelar et lmghs pour vos précisions :
Voici une proposition de code qui semble résoudre la question 3 :
Notez que j'ai fait
f(std::forward<T>(n));
et pas
f(std::forward<T&&>(n));
??
Pour le forward, j'ai regardé au conseil 24 sans trop m'apesantir dessus, car j'en suis au au conseil 3. Cependant, Scott Meyers indique dans la section " à retenir":
"std::forward convertit son argument en rvalue uniquement si celui-ci est lié à une rvalue".
#include <iostream>
#include <memory>
void f(int &n) {
std::cout<<"f a été appelé par une lvalue";
}
void f(int&& n) {
std::cout<<"f a été appelé par une rvalue";
}
// declaration de g
template <typename T>
void g(T&& n)
{
f(std::forward<T>(n));
}
int main() {
// appel de f avec une lvalue
int b{1};
//f(b);
g(b);
// appel de f avec une rvalue
//f(1);
g(1);
}
- Edité par pseudo-simple 6 novembre 2018 à 10:47:03
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.