| // Copyright Daniel Wallin 2006. |
| // 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_PARAMETER_AUX_NAME_HPP |
| #define BOOST_PARAMETER_AUX_NAME_HPP |
| |
| namespace boost { namespace parameter { namespace aux { |
| |
| struct name_tag_base |
| { |
| }; |
| |
| template <typename Tag> |
| struct name_tag |
| { |
| }; |
| }}} // namespace boost::parameter::aux |
| |
| #include <boost/mpl/bool.hpp> |
| |
| namespace boost { namespace parameter { namespace aux { |
| |
| template <typename T> |
| struct is_name_tag : ::boost::mpl::false_ |
| { |
| }; |
| }}} // namespace boost::parameter::aux |
| |
| #include <boost/parameter/value_type.hpp> |
| #include <boost/mpl/placeholders.hpp> |
| #include <boost/config.hpp> |
| #include <boost/config/workaround.hpp> |
| |
| #if !defined(BOOST_NO_SFINAE) && \ |
| !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x592)) |
| #include <boost/parameter/aux_/lambda_tag.hpp> |
| #include <boost/mpl/lambda.hpp> |
| #include <boost/mpl/bind.hpp> |
| #include <boost/mpl/quote.hpp> |
| #include <boost/core/enable_if.hpp> |
| |
| namespace boost { namespace mpl { |
| |
| template <typename T> |
| struct lambda< |
| T |
| , typename ::boost::enable_if< |
| ::boost::parameter::aux::is_name_tag<T> |
| , ::boost::parameter::aux::lambda_tag |
| >::type |
| > |
| { |
| typedef ::boost::mpl::true_ is_le; |
| typedef ::boost::mpl::bind3< |
| ::boost::mpl::quote3< ::boost::parameter::value_type> |
| , ::boost::mpl::arg<2> |
| , T |
| , void |
| > result_; |
| typedef result_ type; |
| }; |
| }} // namespace boost::mpl |
| |
| #endif // SFINAE enabled, not Borland. |
| |
| #include <boost/parameter/aux_/void.hpp> |
| |
| #define BOOST_PARAMETER_TAG_PLACEHOLDER_TYPE(tag) \ |
| ::boost::parameter::value_type< \ |
| ::boost::mpl::_2,tag,::boost::parameter::void_ \ |
| > |
| /**/ |
| |
| #if defined(BOOST_PARAMETER_CAN_USE_MP11) |
| #define BOOST_PARAMETER_TAG_MP11_PLACEHOLDER_VALUE(name, tag) \ |
| template <typename ArgumentPack> \ |
| using name = typename ::boost::parameter \ |
| ::value_type<ArgumentPack,tag,::boost::parameter::void_>::type |
| /**/ |
| |
| #include <boost/parameter/binding.hpp> |
| |
| #define BOOST_PARAMETER_TAG_MP11_PLACEHOLDER_BINDING(name, tag) \ |
| template <typename ArgumentPack> \ |
| using name = typename ::boost::parameter \ |
| ::binding<ArgumentPack,tag,::boost::parameter::void_>::type |
| /**/ |
| |
| #endif // BOOST_PARAMETER_CAN_USE_MP11 |
| #endif // include guard |
| |