
Stewart, Robert wrote:
Robert Ramey wrote:
I thought the serialization library was "clean" until someone complained that there were warnings at level 4. When I investigated, I found that the major complaint was that that I had "const" members so the compiler couldn't generate copy/assigment functions. It turns out that these classes used the boost::noncopyable facility. So to eliminate these warnings this facility needs to be re-implemented in a different way.
While not as easy for you as some yet undiscovered change to noncopyable, can't you just use the MSVC pragma warning dance around your classes to quiet that warning in each case?
I could, and I might but.... To my mind this is an invalid warning. The code in question is not incorrect and the boost::noncopyable provides the protection against the situation that the warning is designed to detect. So from my perspective the best would be to add /wd4511 and /wd4512 to the compiler switches. Of course that's not really a good solution because other code might not have the boost non_copyable protection. Ideally the compiler would be able detect that the copy/assigment functions can't be used in this case any way. Or maybe the compiler needs some sort of class attribute. in the meantime... Of course I can conditionaly include pragma for this compiler. The problem is that you start have to doing for all compilers and they've all got their own set of quirks. This makes the code harder to read, understand and maintain. You HAVE to do it sometimes to work around bogus compiler errors but I'm sort of reluctant to embark upon this to work around bogus compiler warnings. This raises the question about how to handle the "warning" that such and such a function has been "deprecated" when it actually hasn't and of course those warnings which are just hints that sometimes have to be knowingly violated. Basically, once you start considering this - it sort of takes on a life of its own. Robert Ramey