From b7aa0792411d783f2ebe01aa61a776eebfcb0158 Mon Sep 17 00:00:00 2001 From: Aleksey Gurtovoy Date: Sun, 11 May 2003 10:48:26 +0000 Subject: [PATCH] modify type_wrapper for the sake of GCC [SVN r18382] --- include/boost/mpl/aux_/type_wrapper.hpp | 37 +++++++++++++++++++------ 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/include/boost/mpl/aux_/type_wrapper.hpp b/include/boost/mpl/aux_/type_wrapper.hpp index bd33ed8..f432fb1 100644 --- a/include/boost/mpl/aux_/type_wrapper.hpp +++ b/include/boost/mpl/aux_/type_wrapper.hpp @@ -1,9 +1,11 @@ -//----------------------------------------------------------------------------- -// boost mpl/aux/type_wrapper.hpp header file -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2000-02 + +#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED +#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED + +// + file: boost/mpl/aux_/type_wrapper.hpp +// + last modified: 09/may/03 + +// Copyright (c) 2000-03 // Peter Dimov, Aleksey Gurtovoy // // Permission to use, copy, modify, distribute and sell this software @@ -13,9 +15,10 @@ // supporting documentation. No representations are made about the // suitability of this software for any purpose. It is provided "as is" // without express or implied warranty. +// +// See http://www.boost.org/libs/mpl for documentation. -#ifndef BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED -#define BOOST_MPL_AUX_TYPE_WRAPPER_HPP_INCLUDED +#include "boost/mpl/aux_/config/ctps.hpp" namespace boost { namespace mpl { @@ -26,6 +29,24 @@ template< typename T > struct type_wrapper typedef T type; }; +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +// agurt 08/may/03: a complicated way to extract the wrapped type; need it +// mostly for the sake of GCC (3.2.x), which ICEs if you try to extract the +// nested 'type' from 'type_wrapper' when the latter was the result of a +// 'typeof' expression +template< typename T > struct wrapped_type; + +template< typename T > struct wrapped_type< type_wrapper > +{ + typedef T type; +}; +#else +template< typename W > struct wrapped_type +{ + typedef typename W::type type; +}; +#endif + } // namespace aux } // namespace mpl } // namespace boost