// (C) Copyright Jeremy Siek 2000. // 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) // // This file checks to see if various standard container // implementations live up to requirements specified in the C++ // standard. As many implementations do not live to the requirements, // it is not uncommon for this file to fail to compile. The // BOOST_HIDE_EXPECTED_ERRORS macro is provided here if you want to // see as much of this file compile as possible. // #include #include #include #include #include #include #include #if 0 #include #endif // Define this macro if you want to hide the expected error, that is, // error in the various C++ standard library implementations. // //#define BOOST_HIDE_EXPECTED_ERRORS int main() { using namespace boost; #if defined(_ITERATOR_) && defined(BOOST_HIDE_EXPECTED_ERRORS) // VC++ STL implementation is not standard conformant and // fails to pass these concept checks #else typedef std::vector Vector; typedef std::deque Deque; typedef std::list List; // VC++ missing pointer and const_pointer typedefs function_requires< Mutable_RandomAccessContainer >(); function_requires< BackInsertionSequence >(); #if !(defined(__GNUC__) && defined(BOOST_HIDE_EXPECTED_ERRORS)) #if !((defined(__sgi) || (defined(__DECCXX) && defined(_RWSTD_VER) && _RWSTD_VER <= 0x0203)) \ && defined(BOOST_HIDE_EXPECTED_ERRORS)) // old deque iterator missing n + iter operation function_requires< Mutable_RandomAccessContainer >(); #endif // warnings about signed and unsigned in old deque version function_requires< FrontInsertionSequence >(); function_requires< BackInsertionSequence >(); #endif // VC++ missing pointer and const_pointer typedefs function_requires< Mutable_ReversibleContainer >(); function_requires< FrontInsertionSequence >(); function_requires< BackInsertionSequence >(); #if 0 typedef BOOST_STD_EXTENSION_NAMESPACE::slist SList; function_requires< FrontInsertionSequence >(); #endif typedef std::set Set; typedef std::multiset MultiSet; typedef std::map Map; typedef std::multimap MultiMap; function_requires< SortedAssociativeContainer >(); function_requires< SimpleAssociativeContainer >(); function_requires< UniqueAssociativeContainer >(); function_requires< SortedAssociativeContainer >(); function_requires< SimpleAssociativeContainer >(); function_requires< MultipleAssociativeContainer >(); function_requires< SortedAssociativeContainer >(); function_requires< UniqueAssociativeContainer >(); function_requires< PairAssociativeContainer >(); function_requires< SortedAssociativeContainer >(); function_requires< MultipleAssociativeContainer >(); function_requires< PairAssociativeContainer >(); #endif return 0; }