1 // -*- C++ -*- 2 // ---------------------------------------------------------------------------- 3 // config_macros.hpp : configuration macros for the format library 4 // only BOOST_IO_STD is absolutely needed (it should be 'std::' in general) 5 // others are compiler-specific workaround macros used in #ifdef switches 6 // ---------------------------------------------------------------------------- 7 8 // Copyright Samuel Krempp 2003. Use, modification, and distribution are 9 // subject to the Boost Software License, Version 1.0. (See accompanying 10 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 11 12 // see http://www.boost.org/libs/format for library home page 13 14 15 // ---------------------------------------------------------------------------- 16 17 #ifndef BOOST_FORMAT_CONFIG_MACROS_HPP 18 #define BOOST_FORMAT_CONFIG_MACROS_HPP 19 20 #include <boost/config.hpp> 21 #include <boost/detail/workaround.hpp> 22 23 // make sure our local macros wont override something : 24 #if defined(BOOST_NO_LOCALE_ISDIGIT) || defined(BOOST_OVERLOAD_FOR_NON_CONST) \ 25 || defined(BOOST_IO_STD) || defined( BOOST_IO_NEEDS_USING_DECLARATION ) \ 26 || defined(BOOST_NO_TEMPLATE_STD_STREAM) \ 27 || defined(BOOST_FORMAT_STREAMBUF_DEFINED) || defined(BOOST_FORMAT_OSTREAM_DEFINED) 28 #error "boost::format uses a local macro that is already defined." 29 #endif 30 31 // specific workarounds. each header can define BOOS_IO_STD if it 32 // needs. (e.g. because of IO_NEEDS_USING_DECLARATION) 33 #include <boost/format/detail/workarounds_gcc-2_95.hpp> 34 #include <boost/format/detail/workarounds_stlport.hpp> 35 36 #ifndef BOOST_IO_STD 37 # define BOOST_IO_STD ::std:: 38 #endif 39 40 #if defined(BOOST_NO_STD_LOCALE) || \ 41 ( BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x564) \ 42 || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT( 0x570 ) ) ) 43 // some future BOOST_BORLANDC >0x564 versions might not need this 44 // 0x570 is Borland's kylix branch 45 #define BOOST_NO_LOCALE_ISDIGIT 46 #endif 47 48 #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x570) ) || BOOST_WORKAROUND( BOOST_MSVC, BOOST_TESTED_AT(1300)) 49 #define BOOST_NO_OVERLOAD_FOR_NON_CONST 50 #endif 51 52 // **** Workaround for io streams, stlport and msvc. 53 #ifdef BOOST_IO_NEEDS_USING_DECLARATION 54 namespace boost { 55 using std::char_traits; 56 using std::basic_ostream; 57 namespace io { 58 using std::basic_ostream; 59 namespace detail { 60 using std::basic_ios; 61 using std::basic_ostream; 62 } 63 } 64 #if ! defined(BOOST_NO_STD_LOCALE) 65 using std::locale; 66 namespace io { 67 using std::locale; 68 namespace detail { 69 using std::locale; 70 } 71 } 72 #endif // locale 73 } 74 // -end N.S. boost 75 #endif // needs_using_declaration 76 77 #if ! defined(BOOST_NO_STD_LOCALE) 78 #include <locale> 79 #endif 80 81 82 // *** hide std::locale if it doesnt exist. 83 // this typedef is either std::locale or int, avoids placing ifdefs everywhere 84 namespace boost { namespace io { namespace detail { 85 #if ! defined(BOOST_NO_STD_LOCALE) 86 typedef BOOST_IO_STD locale locale_t; 87 #else 88 typedef int locale_t; 89 #endif 90 } } } 91 92 93 // ---------------------------------------------------------------------------- 94 95 #endif // BOOST_FORMAT_MACROS_DEFAULT_HPP 96