Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: /// \file pack.hpp Chris@16: /// Contains helpers for pseudo-pack expansion. Chris@16: // Chris@16: // Copyright 2012 Eric Niebler. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_PROTO_TRANSFORM_DETAIL_PACK_HPP_EAN_2012_07_11 Chris@16: #define BOOST_PROTO_TRANSFORM_DETAIL_PACK_HPP_EAN_2012_07_11 Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@101: #if defined(_MSC_VER) Chris@16: # pragma warning(push) Chris@16: # pragma warning(disable: 4348) // redefinition of default parameter Chris@16: #endif Chris@16: Chris@16: namespace boost { namespace proto Chris@16: { Chris@16: namespace detail Chris@16: { Chris@16: template Chris@16: struct msvc_fun_workaround; Chris@16: Chris@16: template Chris@16: struct expand_pattern_helper Chris@16: { Chris@16: typedef T type; Chris@16: typedef mpl::false_ applied; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct expand_pattern_helper Chris@16: : expand_pattern_helper Chris@16: {}; Chris@16: Chris@16: template Chris@16: struct expand_pattern_helper Chris@16: { Chris@16: // BUGBUG fix me. See comment in transform/detail/call.hpp Chris@16: BOOST_MPL_ASSERT_MSG( Chris@16: (is_same::value) Chris@16: , PACK_EXPANSIONS_OF_EXPRESSIONS_OTHER_THAN_THE_CURRENT_NOT_YET_SUPPORTED Chris@16: , (T) Chris@16: ); Chris@16: typedef Tfx type(T); Chris@16: typedef mpl::true_ applied; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct expand_pattern_helper Chris@16: { Chris@16: typedef Tfx type; Chris@16: typedef mpl::true_ applied; Chris@16: }; Chris@16: Chris@16: #include Chris@16: Chris@16: template Chris@16: struct expand_pattern; Chris@16: Chris@16: template Chris@16: struct expand_pattern<0, Fun, Cont> Chris@16: : Cont::template cat::type> Chris@16: { Chris@16: BOOST_MPL_ASSERT_MSG( Chris@16: (expand_pattern_helper::applied::value) Chris@16: , NO_PACK_EXPRESSION_FOUND_IN_PACK_EXPANSION Chris@16: , (Fun) Chris@16: ); Chris@16: }; Chris@16: Chris@16: #include Chris@16: } Chris@16: }} Chris@16: Chris@101: #if defined(_MSC_VER) Chris@16: # pragma warning(pop) Chris@16: #endif Chris@16: Chris@16: #endif