From a31009e73c24cb2c990c075192fe7058517b9d11 Mon Sep 17 00:00:00 2001 From: Kohei Takahashi Date: Tue, 23 Jun 2015 11:17:30 +0900 Subject: [PATCH] at_key and value_at_key are aware of no-bounds sequence. --- .../fusion/sequence/intrinsic/at_key.hpp | 23 +++++++++++++++-- .../sequence/intrinsic/value_at_key.hpp | 25 ++++++++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/include/boost/fusion/sequence/intrinsic/at_key.hpp b/include/boost/fusion/sequence/intrinsic/at_key.hpp index 4693a905..e8fa2ade 100644 --- a/include/boost/fusion/sequence/intrinsic/at_key.hpp +++ b/include/boost/fusion/sequence/intrinsic/at_key.hpp @@ -11,10 +11,15 @@ #include #include #include +#include #include #include #include +#include #include +#include +#include +#include namespace boost { namespace fusion { @@ -64,12 +69,26 @@ namespace boost { namespace fusion struct at_key_impl; } + namespace detail + { + template + struct at_key_impl + : mpl::if_< + mpl::or_< + typename extension::has_key_impl::template apply + , traits::has_no_bounds + > + , typename extension::at_key_impl::template apply + , mpl::empty_base + >::type + {}; + } + namespace result_of { template struct at_key - : extension::at_key_impl::type>:: - template apply + : detail::at_key_impl::type> {}; } diff --git a/include/boost/fusion/sequence/intrinsic/value_at_key.hpp b/include/boost/fusion/sequence/intrinsic/value_at_key.hpp index 6d8be3fb..8b3940e7 100644 --- a/include/boost/fusion/sequence/intrinsic/value_at_key.hpp +++ b/include/boost/fusion/sequence/intrinsic/value_at_key.hpp @@ -10,10 +10,15 @@ #include #include +#include +#include +#include #include +#include #include #include #include +#include namespace boost { namespace fusion { @@ -52,13 +57,27 @@ namespace boost { namespace fusion template <> struct value_at_key_impl; } - + + namespace detail + { + template + struct value_at_key_impl + : mpl::if_< + mpl::or_< + typename extension::has_key_impl::template apply + , traits::has_no_bounds + > + , typename extension::value_at_key_impl::template apply + , mpl::empty_base + >::type + {}; + } + namespace result_of { template struct value_at_key - : extension::value_at_key_impl::type>:: - template apply + : detail::value_at_key_impl::type> {}; } }}