
AMDG I ran the attached program on the Subversion trunk. output attached. There are quite a few headers that suppress warnings but fail to restore them. Some of these are harmless and a a few are paired disable/enable headers. In Christ, Steven Watanabe ./boost/archive/detail/abi_prefix.hpp ./boost/archive/detail/abi_suffix.hpp ./boost/archive/impl/basic_xml_grammar.hpp ./boost/asio/detail/pop_options.hpp ./boost/asio/detail/push_options.hpp ./boost/config/compiler/visualc.hpp ./boost/fusion/sequence/container/map/detail/map_lookup.hpp ./boost/fusion/sequence/container/set/detail/set_lookup.hpp ./boost/fusion/support/detail/compiler_config.hpp ./boost/interprocess/allocators/detail/adaptive_node_pool.hpp ./boost/interprocess/allocators/detail/node_pool.hpp ./boost/interprocess/allocators/detail/node_tools.hpp ./boost/interprocess/detail/config_begin.hpp ./boost/interprocess/detail/config_end.hpp ./boost/interprocess/smart_ptr/segment_deleter.hpp ./boost/intrusive/detail/config_begin.hpp ./boost/intrusive/detail/config_end.hpp ./boost/iostreams/detail/config/disable_warnings.hpp ./boost/iostreams/detail/config/enable_warnings.hpp ./boost/operators.hpp ./boost/ptr_container/detail/static_move_ptr.hpp ./boost/python/detail/config.hpp ./boost/python/detail/wrap_python.hpp ./boost/regex/pattern_except.hpp ./boost/regex/v4/regex_workaround.hpp ./boost/serialization/collections_load_imp.hpp ./boost/serialization/detail/stack_constructor.hpp ./boost/serialization/ephemeral.hpp ./boost/serialization/hash_collections_load_imp.hpp ./boost/serialization/nvp.hpp ./boost/serialization/serialization.hpp ./boost/serialization/variant.hpp ./boost/serialization/void_cast.hpp ./boost/spirit/core/primitives/impl/primitives.ipp ./boost/spirit/core/primitives/primitives.hpp ./boost/statechart/detail/rtti_policy.hpp ./boost/statechart/detail/state_base.hpp ./boost/statechart/state_machine.hpp ./boost/static_warning.hpp ./boost/test/detail/enable_warnings.hpp ./boost/test/detail/suppress_warnings.hpp ./boost/test/utils/iterator/ifstream_line_iterator.hpp ./boost/test/utils/nullstream.hpp ./boost/test/utils/runtime/config.hpp ./boost/tuple/detail/tuple_basic_no_partial_spec.hpp ./libs/serialization/src/basic_xml_grammar.ipp ./libs/statechart/example/Camera/Camera.hpp ./libs/statechart/example/Camera/Configuring.hpp ./libs/statechart/example/Camera/Shooting.hpp ./libs/type_traits/test/test.hpp ./libs/wave/samples/cpp_tokens/cpp_tokens_config.hpp ./libs/wave/samples/list_includes/list_includes_config.hpp ./libs/wave/samples/token_statistics/token_statistics.hpp ./libs/wave/samples/waveidl/idl_config.hpp ./tools/quickbook/detail/actions.hpp ./tools/wave/cpp_config.hpp // check_pragmas.cpp // // Copyright (c) 2007 // Steven Watanabe // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include <string> #include <iterator> #include <iostream> #include <boost/filesystem.hpp> #include <boost/filesystem/fstream.hpp> #include <boost/regex.hpp> namespace fs = boost::filesystem; boost::regex pragmas("#\\s*pragma\\s+warning\\s*\\(\\s*((push)|(pop)|(disable))"); int main() { fs::recursive_directory_iterator iter("."); fs::recursive_directory_iterator end; for(; iter != end; ++iter) { if(!fs::is_directory(iter->path())) { const std::string extension(fs::extension(iter->path())); if(extension == ".hpp" || extension == ".ipp") { fs::ifstream file(iter->path()); std::string file_contents(std::istreambuf_iterator<char>(file.rdbuf()), std::istreambuf_iterator<char>()); int push_count = 0; boost::regex_iterator<std::string::iterator> regex_iter(file_contents.begin(), file_contents.end(), pragmas); boost::regex_iterator<std::string::iterator> regex_end; for(; regex_iter != regex_end; ++regex_iter) { if((*regex_iter)[2].matched) { ++push_count; } else if((*regex_iter)[3].matched) { --push_count; if(push_count < 0) { std::cout << *iter << std::endl; goto done_with_file; } } else if((*regex_iter)[4].matched) { if(push_count <= 0) { std::cout << *iter << std::endl; goto done_with_file; } } } if(push_count != 0) { std::cout << *iter << std::endl; } done_with_file:; } } } }