1 /*============================================================================= 2 Copyright (c) 2009 Christopher Schmidt 3 4 Distributed under the Boost Software License, Version 1.0. (See accompanying 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 ==============================================================================*/ 7 8 #ifndef BOOST_FUSION_ITERATOR_KEY_OF_HPP 9 #define BOOST_FUSION_ITERATOR_KEY_OF_HPP 10 11 #include <boost/fusion/support/config.hpp> 12 #include <boost/fusion/support/tag_of.hpp> 13 14 namespace boost { namespace fusion 15 { 16 struct iterator_facade_tag; 17 18 namespace extension 19 { 20 template <typename> 21 struct key_of_impl; 22 23 template <> 24 struct key_of_impl<iterator_facade_tag> 25 { 26 template <typename It> 27 struct apply 28 : It::template key_of<It> 29 {}; 30 }; 31 } 32 33 namespace result_of 34 { 35 template <typename It> 36 struct key_of 37 : extension::key_of_impl<typename traits::tag_of<It>::type>:: 38 template apply<It> 39 {}; 40 } 41 }} 42 43 #endif 44