Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:34:40

0001 /*=============================================================================
0002     Copyright (c) 2014,2018 Kohei Takahashi
0003 
0004     Distributed under the Boost Software License, Version 1.0. (See accompanying
0005     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 ==============================================================================*/
0007 #ifndef FUSION_VALUE_AT_IMPL_16122014_1641
0008 #define FUSION_VALUE_AT_IMPL_16122014_1641
0009 
0010 #include <boost/fusion/support/config.hpp>
0011 #include <boost/fusion/container/vector/detail/config.hpp>
0012 
0013 ///////////////////////////////////////////////////////////////////////////////
0014 // Without variadics, we will use the PP version
0015 ///////////////////////////////////////////////////////////////////////////////
0016 #if !defined(BOOST_FUSION_HAS_VARIADIC_VECTOR)
0017 # include <boost/fusion/container/vector/detail/cpp03/value_at_impl.hpp>
0018 #else
0019 
0020 ///////////////////////////////////////////////////////////////////////////////
0021 // C++11 interface
0022 ///////////////////////////////////////////////////////////////////////////////
0023 #include <boost/fusion/container/vector/vector_fwd.hpp>
0024 #include <boost/type_traits/declval.hpp>
0025 #include <boost/mpl/identity.hpp>
0026 
0027 namespace boost { namespace fusion
0028 {
0029     struct vector_tag;
0030 
0031     namespace vector_detail
0032     {
0033         template <std::size_t I, typename T>
0034         struct store;
0035 
0036         template <std::size_t N, typename U>
0037         static inline BOOST_FUSION_GPU_ENABLED
0038         mpl::identity<U> value_at_impl(store<N, U> const volatile*);
0039     }
0040 
0041     namespace extension
0042     {
0043         template <typename Tag>
0044         struct value_at_impl;
0045 
0046         template <>
0047         struct value_at_impl<vector_tag>
0048         {
0049             template <typename Sequence, typename N>
0050             struct apply : BOOST_FUSION_DECLTYPE_N3031((
0051                     vector_detail::value_at_impl<N::value>(boost::declval<Sequence*>())
0052                 ))
0053             {};
0054         };
0055     }
0056 }}
0057 
0058 #endif
0059 #endif
0060