This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/34862] New: operator new placement varient with reference arg not accepted by g++ 4.3
- From: "peeterj at ca dot ibm dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 18 Jan 2008 23:28:29 -0000
- Subject: [Bug c++/34862] New: operator new placement varient with reference arg not accepted by g++ 4.3
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Have a class that defines a placement new like varient that updates a pointer
to raw storage via a reference argument. Here's a stripped down code fragment:
#include <stddef.h> // size_t
class T
{
public:
void *operator new(size_t size, char *&p);
T( int &rc);
} ;
void *T::operator new(size_t size, char *&p)
{
void *o;
o = (void *) p;
p += size;
return(o);
}
T * f ( char *& cur_vardatap )
{
int rc ;
T * subTypep = new((char *&)cur_vardatap)
T( rc );
return subTypep ;
}
If I build this code with GCC4.3 it doesn't want to generate code that calls
it:
r2.C: In function 'T* f(char*&)':
r2.C:29: error: no matching function for call to 'T::operator new(long unsigned
int, char*)'
r2.C:13: note: candidates are: static void* T::operator new(size_t, char*&)
This code seems a bit fishy to me (casting the input parameter to a reference
type seems odd, and I'm wondering if that cast was added because some other
compiler wouldn't call this operator new either).
This can be worked around this easily enough by changing the code in question
to call global placement new and then increment cur_vardatap by sizeof(T)
afterwards (this specialized new operator is only called in two places so in
all honesty I don't know why the original developer bothered doing all this).
However, regardless of whether this is recoded, is GCC4.3 is correct rejecting
this, or is this a GCC 4.3 regression? GCC 4.2 and previous compilers accept
this syntax (as do a number of other compilers, IBM xlC, Sun WSPro, intel icpc,
msdev, ...)
--
Summary: operator new placement varient with reference arg not
accepted by g++ 4.3
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: peeterj at ca dot ibm dot com
GCC build triplet: x86_64-unknown-linux-gnu
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34862