Lors de l'étape 1 il y a un appel à l'operateur = de T (T::operator=())
Si l'operateur = lance une exception alors la copie ne se fait pas et T retourné par dequeue() est foireux.
Effectivement std::queue ne fonctionne pas ainsi et pop() (l'equivalent de dequeue()) ne retourne rien cf http://www.sgi.com/tech/stl/queue.html#3 ou les concepteurs de la STL expliquent les raisons.
Es dramatique ?
Une exception a eu lieu, ta valeur est donc non garantie, je trouve rien de choquant a ca, c'est meme plutôt commun.
Tu peux toujours utiliser QQueue de la meme façon que std::queue.
AHMA les concepteurs de la STL ne détiennent pas LA vérité. Par exemple en C# Queue.Dequeue fonctionne de la meme façon que QQueue, pareil en Java.
Parler d'"erreurs de design" est clairement exagéré.
[^] # Re: Boost ? c'est quoi ?
Posté par tanguy_k (site web personnel) . En réponse à la dépêche Sortie de Boost 1.46. Évalué à -1.
Prototype :
T QQueue::dequeue()Au moment de
dequeue()2 étapes sont effectuées :Lors de l'étape 1 il y a un appel à l'operateur = de T (
T::operator=())Si l'operateur = lance une exception alors la copie ne se fait pas et T retourné par
dequeue()est foireux.Effectivement
std::queuene fonctionne pas ainsi etpop()(l'equivalent dedequeue()) ne retourne rien cf http://www.sgi.com/tech/stl/queue.html#3 ou les concepteurs de la STL expliquent les raisons.Es dramatique ?
Une exception a eu lieu, ta valeur est donc non garantie, je trouve rien de choquant a ca, c'est meme plutôt commun.
Tu peux toujours utiliser
QQueuede la meme façon questd::queue.AHMA les concepteurs de la STL ne détiennent pas LA vérité. Par exemple en C#
Queue.Dequeuefonctionne de la meme façon queQQueue, pareil en Java.Parler d'"erreurs de design" est clairement exagéré.