Это должно сделать трюк:
#ifdef __GNUC__
#define DEPRECATED(func) func __attribute__ ((deprecated))
#elif defined(_MSC_VER)
#define DEPRECATED(func) __declspec(deprecated) func
#else
#pragma message("WARNING: You need to implement DEPRECATED for this compiler")
#define DEPRECATED(func) func
#endif
...
//don't use me any more
DEPRECATED(void OldFunc(int a, float b));
//use me instead
void NewFunc(int a, double b);
Однако вы столкнетесь с проблемами, если тип возвращаемой функции имеет запятую в своем имени, например. std::pair
, так как это будет интерпретироваться препроцессором, передавая 2 аргумента макросу DEPRECATED. В этом случае вам придется напечатать тип возврата.
Изменить: более простая (но, возможно, менее совместимая) версия здесь .