views:

1025

answers:

3

I've started a new project and have decided to make sure it builds cleanly with the /Wall option enabled. The only problem is not all 3rd party libraries (like boost) compile without warnings, so I've resorted to doing this in a shared header:

#pragma warning(push)

#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)
#pragma warning(disable:4625)
#pragma warning(disable:4626)
#pragma warning(disable:4571)
#pragma warning(disable:4347)
#pragma warning(disable:4640)
#pragma warning(disable:4365)
#pragma warning(disable:4710)
#pragma warning(disable:4820)
#pragma warning(disable:4350)
#pragma warning(disable:4686)
#pragma warning(disable:4711)
#pragma warning(disable:4548)

#include <boost/array.hpp>
#include <boost/assert.hpp>
#include <boost/assign.hpp>
#include <boost/bind.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/function.hpp>
#include <boost/integer.hpp>
#include <boost/optional.hpp>
#include <boost/regex.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/utility.hpp>
#include <boost/variant.hpp>

#pragma warning(pop)

This works well enough, but every time I add new boost headers I have to add whatever warnings they generate to the list. Is there a way to say disable all warnings for this stretch of code?

+10  A: 

You can push/pop a low level of warning, like this:

#pragma warning(push, 0)     

#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
// ...

#pragma warning(pop)

But know that it's not possible to disable all warnings. For example, some linker warnings are impossible to turn off.

Assaf Lavie
I don't mean to condone necromancy but in your comment here I see a 1-to-1 relationship with the push/pop of warnings. If I disable N warnings will I need to call pop N times? Again, sorry to resurrect an old thread.
wheaties
The number of warnings you disable is irrelevant. The number of 'pushes' has to match the number of 'pops' that's all.
Assaf Lavie
A: 

What I've done before is set the "W3" option rather than "Wall" then in each of my own source .cpp files I put

#pragma warning(push, 4)

at the top AFTER all the "#include..." lines and then

#pragma warning(pop)

as the very last line of the file.

This way you get level 4 warnings in your code and level 3 in 3rd party code that you can't do anything about.

Matt Warren
+3  A: 
#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)

for less lines....

#pragma warning (disable : 4820 4619 4668)
EvilTeach