почему if-case верен?!
typedef std::set< boost::shared_ptr<CCall>, HasFirstQueuedLongerTime> queued_container;
queued_container::iterator itTemp = queued.find(spCall);
queued_container::iterator itTempEnd = queued.end();
if(itTemp != itTempEnd ) //<-- is true
queued
является пустым std::set
, а spCall
является общим указателем на объект. Поскольку queued
пусто, функция find должна вернуть итератор, равный queued.end()
...
Я собираю и отлаживаю vs2005. Я вижу, что itTemp
и itTempEnd
указывают на один и тот же адрес.
Благодарен за все ответы!
Дополнительная информация о коде, перед оператором if объявляется следующее:
queued_container queuedCalls;
const boost::shared_ptr<CCall> &spCall; //spCall is valid according to debug info.
struct HasFirstQueuedLongerTime : std::binary_function < boost::shared_ptr<CCall>, boost::shared_ptr<CCall>, bool> {
bool operator() (const boost::shared_ptr<CCall>& lhs, const boost::shared_ptr<CCall>& rhs) const
{
return lhs->CreatedTime() < rhs->CreatedTime(); //returns true if lhs queued longer time than rhs
}
};
Мой настоящий исполняемый код:
queued_container::iterator itTemp = queued.find(spCall);
queued_container::iterator itTempEnd = queued.end();
if(itTemp != itTempEnd )
AS_ERROR(1, "XXX", "ERROR: Already added to queue container.");
queued.insert(spCall);
CCallQueue::insert(spCall);
Ps. Извините за много правок ..