Macro para reemplazar el operador C ++ nuevo

¿Es posible crear macros para reemplazar todas las formas deoperator new con sobrecargas que incluyen argumentos adicionales ... diga__FILE__ y__LINE__?

El problema parece ser queoperator new puede codificarse con o sin paréntesis, por lo tanto:

como objeto macros:

#define new new(__FILE__, __LINE__)

reemplazará declaraciones como:

A* a = new A();

y como función macros:

#define new(A) new (A, __FILE__, __LINE__)

reemplazará declaraciones como:

A* a = new(std::nothrow) A();

amentablemente, es un error intentar declarar dos macros con la misma identificador, incluso si son de diferente tipos, por lo que falla lo siguiente:

#define new new(__FILE__, __LINE__)
#define new(A) new (A, __FILE__, __LINE__) // Error: "new" already defined

Ya que estoy usando g ++ tenía la esperanza de que empleando su sintaxis de macros variables produciría éxito, pero desafortunadamente no. El seguimiento

#define new(...) new(__FILE__, __LINE__, ## __VA_ARGS__)

solo coincidenew(xyx) A(), nonew A().

Yo sé esoe han escrito @ ensayos sobre por qué es imposible, pero siento que estoy tan cerca que debe haber una manera. ¿Hay algo obvio que me estoy perdiendo?

Respuestas a la pregunta(7)

Su respuesta a la pregunta