Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 08:47:26

0001 /*
0002  * Distributed under the Boost Software License, Version 1.0.
0003  * (See accompanying file LICENSE_1_0.txt or copy at
0004  * https://www.boost.org/LICENSE_1_0.txt)
0005  *
0006  * Copyright (c) 2025 Andrey Semashev
0007  */
0008 
0009 #ifndef BOOST_ITERATOR_DETAIL_EVAL_IF_DEFAULT_HPP_INCLUDED_
0010 #define BOOST_ITERATOR_DETAIL_EVAL_IF_DEFAULT_HPP_INCLUDED_
0011 
0012 #include <boost/core/use_default.hpp>
0013 #include <boost/iterator/detail/type_traits/type_identity.hpp>
0014 
0015 namespace boost {
0016 namespace iterators {
0017 namespace detail {
0018 
0019 // If T is use_default, return the result of invoking
0020 // DefaultNullaryFn, otherwise - of NondefaultNullaryFn.
0021 // By default, NondefaultNullaryFn returns T, which means
0022 // the metafunction can be called with just two parameters
0023 // and in that case will return either T or the result of
0024 // invoking DefaultNullaryFn.
0025 template< typename T, typename DefaultNullaryFn, typename NondefaultNullaryFn = detail::type_identity< T > >
0026 struct eval_if_default
0027 {
0028     using type = typename NondefaultNullaryFn::type;
0029 };
0030 
0031 template< typename DefaultNullaryFn, typename NondefaultNullaryFn >
0032 struct eval_if_default< use_default, DefaultNullaryFn, NondefaultNullaryFn >
0033 {
0034     using type = typename DefaultNullaryFn::type;
0035 };
0036 
0037 template< typename T, typename DefaultNullaryFn, typename NondefaultNullaryFn = detail::type_identity< T > >
0038 using eval_if_default_t = typename eval_if_default< T, DefaultNullaryFn, NondefaultNullaryFn >::type;
0039 
0040 } // namespace detail
0041 } // namespace iterators
0042 } // namespace boost
0043 
0044 #endif // BOOST_ITERATOR_DETAIL_EVAL_IF_DEFAULT_HPP_INCLUDED_