@ Роберт: Не могли бы вы предоставить какие-либо подробности?

ли создавать макросы для замены всех формoperator new с перегрузками, которые включают дополнительные аргументы ... скажем__FILE__ а также__LINE__?

Беда в том, чтоoperator new может быть закодирован с или без скобок, поэтому:

Объект типа макросы:

#define new new(__FILE__, __LINE__)

заменит объявления как:

A* a = new A();

а такжефункция типа макросы:

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

заменит объявления как:

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

К сожалению, ошибка в попытке объявить два макроса с одинаковымиидентификатордаже если они разныетипы, поэтому следующее не удается:

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

Так как я использую g ++, я надеялся, что используя их синтаксисвариационные макросы принесет успех, но, к сожалению, нет. Последующий:

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

только совпаденияnew(xyx) A()неnew A().

я знаю этоэссе были написаны о том, почему это невозможно, но я чувствую, что я так близко, что должен быть способ. Есть ли что-то очевидное, чего мне не хватает?

Ответы на вопрос(7)

Ваш ответ на вопрос