OVH Cloud OVH Cloud

Réf à locale ou autres

1 réponse
Avatar
Michel Michaud
Je sais que les avertissements ne sont pas définis par la norme,
alors c'est seulement pour résoudre un mystère que je vous pose
la question suivante. Comprenez-vous pourquoi VC 7.1 me donne un
avertissement avec le type unsigned long (de 32 bits) mais pas
avec le type unsigned (de 32 bits aussi !), dans le code suivant :

#include <algorithm>
class C1
{
public :
typedef unsigned size_type;
size_type size() const;
// ...
};

class C2
{
public :
typedef unsigned long size_type;
size_type size() const;
// ...
};

int main()
{
C1 c1a, c1b;
std::min(c1a.size(), c1b.size()); // OK

C2 c2a, c2b;
std::min(c2a.size(), c2b.size()); // Pas OK
// warning C4172: returning address of local variable or temporary
}

La fonction std::min est tout à fait normale, mais c'est vrai
qu'elle manipule des références, qui sont ici associées à des
temporaires.

template<class _Ty> inline
const _Ty& min(const _Ty& _Left, const _Ty& _Right)
{ // return smaller of _Left and _Right
return (_Right < _Left ? _Right : _Left);
}

Alors l'avertissement, on devrait l'avoir dans les deux cas...
Mais ce serait encore plus agaçant !

--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

1 réponse

Avatar
Jean-Marc Bourguet
"Michel Michaud" writes:

// warning C4172: returning address of local variable or temporary
}

La fonction std::min est tout à fait normale, mais c'est vrai
qu'elle manipule des références, qui sont ici associées à des
temporaires.

template<class _Ty> inline
const _Ty& min(const _Ty& _Left, const _Ty& _Right)
{ // return smaller of _Left and _Right
return (_Right < _Left ? _Right : _Left);
}

Alors l'avertissement, on devrait l'avoir dans les deux cas...
Mais ce serait encore plus agaçant !


L'avertissement ne me semble pas fonde.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org