Chris@16: // ---------------------------------------------------------------------------- Chris@16: // msvc_disambiguater.hpp : msvc workarounds. (for put_{head|last} overloads) Chris@16: // the trick was described in boost's list by Aleksey Gurtovoy Chris@16: // ---------------------------------------------------------------------------- Chris@16: Chris@16: // Copyright Samuel Krempp 2003. Use, modification, and distribution are Chris@16: // subject to the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // see http://www.boost.org/libs/format for library home page Chris@16: Chris@16: // ---------------------------------------------------------------------------- Chris@16: Chris@16: #ifndef BOOST_MSVC_DISAMBIGUATER_HPP Chris@16: #define BOOST_MSVC_DISAMBIGUATER_HPP Chris@16: Chris@101: #if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace io { Chris@16: namespace detail { Chris@16: Chris@16: template< class Ch, class Tr, class T > Chris@16: struct disambiguater Chris@16: { Chris@16: template< typename U > Chris@16: static void put_head(BOOST_IO_STD basic_ostream& os, group1 const& x, long) Chris@16: { Chris@16: os << group_head(x.a1_); Chris@16: } Chris@16: static void put_head(BOOST_IO_STD basic_ostream& os, T const& x, int) Chris@16: { Chris@16: } Chris@16: template< typename U > Chris@16: static void put_last(BOOST_IO_STD basic_ostream& os, group1 const& x, long) Chris@16: { Chris@16: os << group_last(x.a1_); Chris@16: } Chris@16: static void put_last(BOOST_IO_STD basic_ostream& os, T const& x, int) Chris@16: { Chris@16: os << x; Chris@16: } Chris@16: }; Chris@16: Chris@16: } // namespace detail Chris@16: } // namespace io Chris@16: } // namespace boost Chris@16: Chris@101: #endif // -__DECCXX_VER Chris@16: Chris@16: #endif // -BOOST_MSVC_DISAMBIGUATER_HPP