Bonjour,

J'ai besoin d'utiliser la fonction value_or (librairie tomlplusplus). Pour simplifier, disons que j'ai besoin de l'appeler sur un bool.
Voici la fonction que je veux �crire :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
auto toml::node::value_or(T&& default_value) const;   // Signature de value_or 
 
// Ma fonction
bool lireAvecValeurParDefaut(toml::table& t, const string& nomVal, bool defaut) {
    // Lit une valeur dans un table et la retourne, si la valeur n'existe pas elle retourne une valeur par défaut
    return t[nomVal].value_or<bool>(defaut);
}
Probl�me, cette fonction ne marche pas vu que dans value_or, default_value doit �tre une r�f�rence de rvalue.
Je ne connaissais pas bien cette notion mais de ce que j'en ai compris les type T&& permettent de s'assurer que la ressource est temporaire et que la m�moire utilis�e peut �tre r�cup�r�e par la fonction (n'h�sitez pas � me corriger).

J'ai deux versions alternatives de ma fonction qui marchent, mais qui sont plus ou moins satisfaisantes :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
bool lireAvecValeurParDefaut(toml::table& t, const string& nomVal, bool defaut) {
    return t[nomVal].value_or<bool>(bool(defaut));       // Version 2
    return t[nomVal].value_or<bool>(std::move(defaut));  // Version 3
}
Je pr�f�re la version 3 parce que (sauf erreur de ma part) la version 2 fait une copie suppl�mentaire. N�anmoins, la version 3 mais �a m'a l'air "inutilement compliqu�e" et moins lisible que ma version initiale.

Par exemple, j'avais pens� � faire passer "defaut" comme une r�f�rence de rvalue :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
bool lireAvecValeurParDefaut(toml::table& t, const string& nomVal, bool&& defaut)
Mais l� non plus �a ne fonctionne pas, vu qu'il estime que defaut peut �tre utilis�e ailleurs dans ma fonction (si j'ai bien compris).

Donc voici ma question, est-il possible de faire autrement que ces deux solutions qui marchent ? Est ce qu'il y a quelque chose de fondamental qui m'�chappe ?

Merci d'avance