У меня есть решение (вдохновленное Марком Б), которое использует boost / serialization / static_warning.hpp.Однако мой позволяет использовать thirdvalue
в качестве символической константы.Он также выдает предупреждения для каждого места, где кто-то пытается использовать thirdvalue
.
#include <boost/serialization/static_warning.hpp>
enum MyEnum {
firstvalue = 0,
secondvalue,
deprecated_thirdvalue, // deprecated
fourthvalue
};
template <int line>
struct Deprecated
{
BOOST_SERIALIZATION_BSW(false, line);
enum {MyEnum_thirdvalue = deprecated_thirdvalue};
};
#define thirdvalue (static_cast<MyEnum>(Deprecated<__LINE__>::MyEnum_thirdvalue))
enum {symbolic_constant = thirdvalue};
int main()
{
MyEnum e = thirdvalue;
}
. В GCC я получаю предупреждения, которые в конечном итоге указывают на строки виновника, содержащие thirdvalue
.
Обратите внимание, чтоиспользование шаблона Deprecated
позволяет сделать так, чтобы строка вывода компилятора «экземпляр здесь» показала, где используется устаревшее перечисление.
Если вы можете найти способ порождать генерацию предупреждения внутри Deprecated
template, тогда вы можете покончить с зависимостью от Boost.