File indexing completed on 2025-01-18 09:35:00
0001
0002
0003
0004
0005
0006
0007 #if !defined(BOOST_FUSION_TRANSFORM_VIEW_KEY_OF_IMPL_JAN_9_2022_0354PM)
0008 #define BOOST_FUSION_TRANSFORM_VIEW_KEY_OF_IMPL_JAN_9_2022_0354PM
0009
0010 #include <boost/fusion/support/config.hpp>
0011 #include <boost/fusion/iterator/deref.hpp>
0012 #include <boost/type_traits/remove_reference.hpp>
0013 #include <boost/type_traits/remove_const.hpp>
0014 #include <boost/utility/result_of.hpp>
0015
0016 namespace boost { namespace fusion
0017 {
0018 struct transform_view_iterator_tag;
0019 struct transform_view_iterator2_tag;
0020
0021 namespace extension
0022 {
0023 template<typename Tag>
0024 struct key_of_impl;
0025
0026
0027 template<>
0028 struct key_of_impl<transform_view_iterator_tag>
0029 {
0030 template <typename Iterator>
0031 struct apply
0032 {
0033 typedef typename
0034 result_of::deref<typename Iterator::first_type>::type
0035 value_type;
0036
0037 typedef typename Iterator::transform_type F;
0038 typedef typename boost::result_of<F(value_type)>::type transformed_type;
0039 typedef typename boost::remove_reference<transformed_type>::type transformed_type_unref;
0040 typedef typename boost::remove_const<transformed_type_unref>::type transformed_type_unconst;
0041
0042 typedef typename transformed_type_unconst::first_type type;
0043 };
0044 };
0045
0046
0047 }
0048 }}
0049 #endif