// -*- C++ -*- | |
// ---------------------------------------------------------------------------- | |
// config_macros.hpp : configuration macros for the format library | |
// only BOOST_IO_STD is absolutely needed (it should be 'std::' in general) | |
// others are compiler-specific workaround macros used in #ifdef switches | |
// ---------------------------------------------------------------------------- | |
// Copyright Samuel Krempp 2003. Use, modification, and distribution are | |
// subject to 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) | |
// see http://www.boost.org/libs/format for library home page | |
// ---------------------------------------------------------------------------- | |
#ifndef BOOST_FORMAT_CONFIG_MACROS_HPP | |
#define BOOST_FORMAT_CONFIG_MACROS_HPP | |
#include <boost/config.hpp> | |
#include <boost/detail/workaround.hpp> | |
// make sure our local macros wont override something : | |
#if defined(BOOST_NO_LOCALE_ISDIGIT) || defined(BOOST_OVERLOAD_FOR_NON_CONST) \ | |
|| defined(BOOST_IO_STD) || defined( BOOST_IO_NEEDS_USING_DECLARATION ) \ | |
|| defined(BOOST_NO_TEMPLATE_STD_STREAM) \ | |
|| defined(BOOST_FORMAT_STREAMBUF_DEFINED) || defined(BOOST_FORMAT_OSTREAM_DEFINED) | |
#error "boost::format uses a local macro that is already defined." | |
#endif | |
// specific workarounds. each header can define BOOS_IO_STD if it | |
// needs. (e.g. because of IO_NEEDS_USING_DECLARATION) | |
#include <boost/format/detail/workarounds_gcc-2_95.hpp> | |
#include <boost/format/detail/workarounds_stlport.hpp> | |
#ifndef BOOST_IO_STD | |
# define BOOST_IO_STD ::std:: | |
#endif | |
#if defined(BOOST_NO_STD_LOCALE) || \ | |
( BOOST_WORKAROUND(__BORLANDC__, <= 0x564) \ | |
|| BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x570 ) ) ) | |
// some future __BORLANDC__ >0x564 versions might not need this | |
// 0x570 is Borland's kylix branch | |
#define BOOST_NO_LOCALE_ISDIGIT | |
#endif | |
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570) ) || BOOST_WORKAROUND( BOOST_MSVC, BOOST_TESTED_AT(1300)) | |
#define BOOST_NO_OVERLOAD_FOR_NON_CONST | |
#endif | |
// gcc-2.95's native stringstream is not usable | |
#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) | |
#define BOOST_FORMAT_IGNORE_STRINGSTREAM | |
#endif | |
// **** Workaround for io streams, stlport and msvc. | |
#ifdef BOOST_IO_NEEDS_USING_DECLARATION | |
namespace boost { | |
using std::char_traits; | |
using std::basic_ostream; | |
namespace io { | |
using std::basic_ostream; | |
namespace detail { | |
using std::basic_ios; | |
using std::basic_ostream; | |
} | |
} | |
#if ! defined(BOOST_NO_STD_LOCALE) | |
using std::locale; | |
namespace io { | |
using std::locale; | |
namespace detail { | |
using std::locale; | |
} | |
} | |
#endif // locale | |
} | |
// -end N.S. boost | |
#endif // needs_using_declaration | |
// *** hide std::locale if it doesnt exist. | |
// this typedef is either std::locale or int, avoids placing ifdefs everywhere | |
namespace boost { namespace io { namespace detail { | |
#if ! defined(BOOST_NO_STD_LOCALE) | |
typedef BOOST_IO_STD locale locale_t; | |
#else | |
typedef int locale_t; | |
#endif | |
} } } | |
// ---------------------------------------------------------------------------- | |
#endif // BOOST_FORMAT_MACROS_DEFAULT_HPP |