[Insight-developers] Re: Suppressing Deprecation Warnings
Brad King
brad.king at kitware.com
Fri Dec 28 14:23:17 EST 2007
Bill Lorensen wrote:
> The problem is the warnings occur even if the method is not used.
I've duplicated this problem as follows:
struct A
{
virtual void __declspec(deprecated) f();
};
struct B: public A
{
virtual void __declspec(deprecated) f();
};
The warning is
tdep.cxx(8) : warning C4996: 'A::f' was declared deprecated
tdep.cxx(3) : see declaration of 'A::f'
The reason seems to be that overriding a virtual function that has been
marked deprecated causes the warning. There does not seem to be any way
to turn off this warning except with "-w" to turn off all warnings.
This adds to my list of reasons to never make virtual functions part of
the public interface. The above should instead be
class A
{
public:
void __declspec(deprecated) f() { this->f_internal(); }
protected:
virtual void f_internal();
};
class B: public A
{
protected:
virtual void f_internal();
};
Unfortuntately it is way too late to change all ITK's methods. However
perhaps this can be done for the deprecated methods if they are not
meant to be overridden by users.
Otherwise I guess we should build some dashboards with ITK_LEGACY_REMOVE
and the rest with ITK_LEGACY_SILENT. Note that this is a problem only
for MSVC. GCC only warns on a call to the method.
-Brad
More information about the Insight-developers
mailing list