/////////////////////////////////////////////////////////////////////////////// /// \file pack.hpp /// Contains helpers for pseudo-pack expansion. // // Copyright 2012 Eric Niebler. Distributed under 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) #ifndef BOOST_PROTO_TRANSFORM_DETAIL_PACK_HPP_EAN_2012_07_11 #define BOOST_PROTO_TRANSFORM_DETAIL_PACK_HPP_EAN_2012_07_11 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma warning(push) # pragma warning(disable: 4348) // redefinition of default parameter #endif namespace boost { namespace proto { namespace detail { template struct msvc_fun_workaround; template struct expand_pattern_helper { typedef T type; typedef mpl::false_ applied; }; template struct expand_pattern_helper : expand_pattern_helper {}; template struct expand_pattern_helper { // BUGBUG fix me. See comment in transform/detail/call.hpp BOOST_MPL_ASSERT_MSG( (is_same::value) , PACK_EXPANSIONS_OF_EXPRESSIONS_OTHER_THAN_THE_CURRENT_NOT_YET_SUPPORTED , (T) ); typedef Tfx type(T); typedef mpl::true_ applied; }; template struct expand_pattern_helper { typedef Tfx type; typedef mpl::true_ applied; }; #include template struct expand_pattern; template struct expand_pattern<0, Fun, Cont> : Cont::template cat::type> { BOOST_MPL_ASSERT_MSG( (expand_pattern_helper::applied::value) , NO_PACK_EXPRESSION_FOUND_IN_PACK_EXPANSION , (Fun) ); }; #include } }} #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma warning(pop) #endif #endif