Veuillez considérer le code suivant. J'essaie de renvoyer un vecteur de vecteurs vers un flux de sortie.
#include
#include
#include
#include
#include
template
std::ostream &operator <<(std::ostream &os, const std::vector &v) {
using namespace std;
copy(v.begin(), v.end(), ostream_iterator(os, "\n"));
return os;
}
int main() {
using namespace std;
vector v1;
cout << v1;
vector > v2;
cout << v2;
return 0;
}
La déclaration où j'imprime un vecteur de chaînes de caractères fonctionne. Celle où j'imprime un vecteur de vecteurs de chaînes de caractères ne fonctionne pas. J'utilise g++ 4.7.0. J'ai essayé avec ou sans le drapeau -std=c++11. En mode C++11, cela me donne cette ligne dans la demi-page d'erreurs.
error: cannot bind 'std::ostream_iterator >, char, std::char_traits >::ostream_type {aka std::basic_ostream}' lvalue to 'std::basic_ostream&&'
Je ne pense pas comprendre ce que cela veut dire. Est-ce que quelqu'un pourrait m'expliquer ? Je sais plus ou moins ce qu'est une référence rvalue, mais je ne vois pas pourquoi std::basic_ostream
ne se lierait pas à std::basic_ostream&&
. Peut-être que je ne le connais pas assez bien. Et y a-t-il un meilleur moyen de faire cela ?
Merci d'avance.