
On Mon, Nov 16, 2009 at 3:08 PM, Patrick Horgan <phorgan1@gmail.com> wrote:
Wonderful!
C4180 Surely instead of suggesting suppressing you would remove the meaningless qualifier?
C4996 Microsoft deprecated these functions on their own (and they call
themselves POSIX compliant), and replaced them with extremely dangerous replacements that they claim are safe. The replacement functions are non-POSIX and aren't available from other compilers, hence non-portable. These warnings should be suppressed. I believe that you can also suppress by defining _CRT_NONSTDC_NO_DEPRECATE before and undef'ing after to do a local suppression.
Somewhat off topic, but why exactly are these extremely dangerous, and not secure?
C4800 Might suggest that they use a bool valued expression in the first place, i.e. instead of foo, foo!=0, or do a static cast to bool. This is at times indicative of real bugs, when people turn out to not be doing what they thought they were doing. Apparently this is one of my favorite bugs (by favorite I don't mean that I like it either!) C4506 Might suggest that they provide the definition;) Someone had mentioned a redesign of boost:noncopyable to work around the C4511 and C4512 warnings from deriving from boost:noncopyable. Is anyone looking into it? Is it even possible? It's a shame that this wonderful thing generates so much noise. If course, if you want to make a class uncopyable, rather than inheriting from boost:uncopyable, you could just make your own copy and assignment declarations privately and without definitions if you don't need them. It makes the class non-copyable without generating the warnings. If you have other causes of C451{0-2} see below: C4510/C4511/C4512 In general if you provide one of destructor, assignment operator, and copy constructor, then you need all three. The best fix is to provide the method. Providing a private declaration is a way of telling the compiler that you are sure your case is different--if it really is. These are all caused by either inaccessible base class version, or const or reference data members. Similar to 4511 and 4512 are the following which occur on trying to derive from a non-copyable class, i.e. one with the preceding issues--you will also get 4511 and 4512.
Beman proposed changing noncopyable idiom to a macro. This would solve not only the warning problems but also the problem of horrible compiler error messages that results from the current idiom. I would welcome this change. Then we could mark the boost::noncopyable class as deprecated Zach