Вот мой пример кода https://godbolt.org/z/VKgKik
#define delete MyCustomDelete(__FILE__, __LINE__), delete
#define CAT(X,Y) CAT2(X,Y)
#define CAT2(X,Y) X##Y
#define CAT_3(X,Y,Z) CAT(X,CAT(Y,Z))
class A {
A() = CAT_3(de,le,te);
};
Пример Godbolt настроен для отображения выходных данных препроцессора.Цель состоит в том, чтобы в конце прохода препроцессора я хотел, чтобы выходной код был
class A {
A() = delete;
};
, в данный момент вместо него отображается ThisShouldNotshowUp.Я думал, что использование оператора ## остановит повторное расширение препроцессора, но этого не произошло.
Я понимаю, что удаление "#define delete" решило бы проблему, но мне нужно это определение там.Причина, по которой я создал макрос с тем же именем, что и при удалении, заключается в том, что я хочу иметь возможность отслеживать новости и удалять, и в случае утечки памяти я вижу, какая строка кода ее исправила.Таким образом, этот макрос означает, что я могу продолжать использовать ключевое слово delete в своем коде, а номера файлов и строк заполняются бесплатно.Насколько я знаю, нет другого способа достичь этой функции, кроме как определенным макросом удаления.В этом суть проблемы.Макрос удаления дал мне мощный инструмент отладки, но он удалил полезную языковую функцию для меня.