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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.