I have some template code that fails with move to v3.4.4
snProbeItem *
snProbeSet::getObjectItem(oaDesignObject *designObject) const
{
if (designObject->isBlockObject()) {
oaBlockObject *blockObj = static_cast<oaBlockObject *>(designObject);
if (blockObj->isInst()) {
oaInst *inst = static_cast<oaInst *>(blockObj);
// This works fine, "oaInst *&" matches template.
return getItem(inst);
} else if (blockObj->isBoundary()) {
// This fails, "oaBoundary *&" does not match template.
return getItem(static_cast<oaBoundary *>(blockObj));
}
}
I need to create an explicit temporary variable for the code
to compile.
snProbeSet.cc:1497: error: no matching function for call to
`snProbeSet::getItem(OpenAccess_4::oaBoundary*) const'
snProbeSet.h:164: note: candidates are: snProbeItemObject<Object>*
snProbeSet::getItem(Object&) const [with Object = OpenAccess_4::oaBoundary*]
template <typename Object>
snProbeItemObject<Object> *getItem(Object &probedItem) const {
snSimpleProbeTransaction lock(const_cast<snProbeSet &>(*this));
return getItem<Object>(lock, probedItem);
}
--
Summary: Templates don't create reference to pointer temporary
Product: gcc
Version: 3.4.4
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: no_spam at earthlink dot net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24532