Это даст вам предупреждение компилятора о солнце с флагом "+ w" или о gcc с флагом "-Wall". К сожалению, это нарушает совместимость ABI функции; Я еще не нашел способ обойти это.
#define DEPRECATED char=function_is_deprecated()
inline char function_is_deprecated()
{
return 65535;
}
void foo(int x, DEPRECATED)
{
}
int main()
{
foo(3);
return 0;
}
Выход:
CC -o test test.cpp +w
"test.cpp", line 7: Warning: Conversion of "int" value to "char" causes truncation.
"test.cpp", line 15: Where: While instantiating "function_is_deprecated()".
"test.cpp", line 15: Where: Instantiated from non-template code.
1 Warning(s) detected.
То, как вы используете это, когда вы хотите объявить функцию устаревшей, вы добавляете запятую в конец списка параметров и пишете DEPRECATED. Он работает под капотом, добавляя аргумент по умолчанию (таким образом сохраняя API), который вызывает предупреждение о преобразовании.