On Mon, 15 Jun 2015, Martin Liška wrote:
Ah, I overlooked that it's not a placement new, but just static casting.
Anyway, if I added:
cselib_val () {}
to struct cselib_val and changed the cast to placement new:
char *ptr = (char *) header;
return new (ptr) T ();
I got following compilation error:
In file included from ../../gcc/alias.c:46:0:
../../gcc/alloc-pool.h: In instantiation of ‘T* pool_allocator<T>::allocate()
[with T = cselib_val]’:
../../gcc/cselib.h:51:27: required from here
../../gcc/alloc-pool.h:416:23: error: no matching function for call to
‘cselib_val::operator new(sizetype, char*&)’
return new (ptr) T ();
^
In file included from ../../gcc/alias.c:47:0:
../../gcc/cselib.h:49:16: note: candidate: static void* cselib_val::operator
new(size_t)
inline void *operator new (size_t)
^
../../gcc/cselib.h:49:16: note: candidate expects 1 argument, 2 provided
#include <new>
--
Marc Glisse