Comparisons of const DataAddr objects are incorrect
---------------------------------------------------
Key: QPID-3344
URL: https://issues.apache.org/jira/browse/QPID-3344
Project: Qpid
Issue Type: Bug
Components: Qpid Managment Framework
Affects Versions: 0.10
Environment: Fedora 15, not that it matters.
Reporter: Zane Bitter
Assignee: Ted Ross
The following program results in incorrect output:
{code:title=test.cpp}
// g++ test.cpp -o test -lqmf2
#include <qmf/DataAddr.h>
#include <iostream>
int main(void)
{
qmf::DataAddr foo("foo", "blarg", 1);
const qmf::DataAddr bar("bar", "wibble", 2);
// prints "false"
std::cout << "foo == bar: " << (foo == bar ? "true" : "false") << "\n";
// prints "true" (Doh!)
std::cout << "bar == foo: " << (bar == foo ? "true" : "false") << "\n";
return 0;
}
{code}
Anywhere where two DataAddr objects are compared and the first is a const
reference will give a bogus result. (Specifically, both operands are converted
to bool before being compared.) The reason is that DataAddr::operator==() is
not declared const, so it will not be used to compare const references, and
that C++ is pure, unadulterated evil.
Not that qmf::Data::getAddr() returns a const qmf::DataAddr&, so this is likely
to be a common problem. Some other APIs, such as qmf::AgentEvent::getDataAddr()
return non-const references, which would be unaffected (unless they become
const at some point in the call chain).
A patch will follow presently.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]