Passage de std::pair en paramètre fail !
Bonjour,
encore une énigme comme le c++ en a le secret !
Suivant que je construise une pair (avec make_pair) dans une fonction ou au moment de la passer en paramètre, je n'ai pas la même chose !
Voilà un petit code minimaliste de démonstration :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <iostream>
using namespace std ;
struct foo
{
foo ( int xx )
{
x = xx ;
y = xx+1 ;
}
pair<const foo&,int> more () const
{
return make_pair<const foo&,int>( *this,7 ) ;
}
int x,y ;
};
ostream & operator<< ( ostream & o , std::pair<const foo&,int> p )
{
o << p.first.x << "," << p.first.y << " + " << p.second ;
return o ;
}
int main ()
{
foo f ( 123 ) ;
cout << make_pair<const foo&,int>( f,11 ) << endl ; // affiche bien 123,124 + 11
cout << f.more() << endl ; // affiche n'importe quoi ! (ex : 1231321,6543213 + 7)
return 0 ;
} |
Ça ressemble au bug du débutant qui renvoie une référence sur un objet de la pile, mais en toute logique non !
Et si c'est bien ça, comment faire ?
Merci d'avance
PS : Je compile sous Visual Studio 2010... au cas où il faille suspecter quelque lacune d'implémentation des stl.