// ---------------------------------------------------------------------------- | |
// msvc_disambiguater.hpp : msvc workarounds. (for put_{head|last} overloads) | |
// the trick was described in boost's list by Aleksey Gurtovoy | |
// ---------------------------------------------------------------------------- | |
// 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_MSVC_DISAMBIGUATER_HPP | |
#define BOOST_MSVC_DISAMBIGUATER_HPP | |
#if BOOST_WORKAROUND( BOOST_MSVC, <= 1300) || \ | |
BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) | |
// this whole header is specifically for msvc up to 7.0 | |
#include <boost/format/group.hpp> | |
#include <ostream> | |
namespace boost { | |
namespace io { | |
namespace detail { | |
template< class Ch, class Tr, class T > | |
struct disambiguater | |
{ | |
template< typename U > | |
static void put_head(BOOST_IO_STD basic_ostream<Ch, Tr>& os, group1<U> const& x, long) | |
{ | |
os << group_head(x.a1_); | |
} | |
static void put_head(BOOST_IO_STD basic_ostream<Ch, Tr>& os, T const& x, int) | |
{ | |
} | |
template< typename U > | |
static void put_last(BOOST_IO_STD basic_ostream<Ch, Tr>& os, group1<U> const& x, long) | |
{ | |
os << group_last(x.a1_); | |
} | |
static void put_last(BOOST_IO_STD basic_ostream<Ch, Tr>& os, T const& x, int) | |
{ | |
os << x; | |
} | |
}; | |
} // namespace detail | |
} // namespace io | |
} // namespace boost | |
#endif // -BOOST_MSVC | |
#endif // -BOOST_MSVC_DISAMBIGUATER_HPP |