J'ai une solution (inspirée de celle de Mark B) qui utilise boost/serialization/static_warning.hpp. Cependant, la mienne permet thirdvalue
pour être utilisé comme une constante symbolique. Il produit également des avertissements pour chaque endroit où quelqu'un tente d'utiliser 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;
}
Avec GCC, j'obtiens des avertissements qui, en fin de compte, pointent vers les lignes coupables contenant thirdvalue
.
Il convient de noter que l'utilisation de l'option Deprecated
fait en sorte qu'une ligne de sortie du compilateur "instancié ici" indique où l'enum déprécié est utilisé.
Si vous pouvez trouver un moyen de générer de manière portative un avertissement à l'intérieur de l'élément Deprecated
vous pouvez alors vous passer de la dépendance à Boost.