22 #ifndef NDN_UTIL_OVERLOAD_HPP    23 #define NDN_UTIL_OVERLOAD_HPP    25 #include <boost/predef/compiler/gcc.h>    26 #include <boost/version.hpp>    29 #if (BOOST_VERSION >= 106100) && (!BOOST_COMP_GNUC || (BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(6,0,0)))    31 #include <boost/hana/functional/overload.hpp>    34 constexpr boost::hana::make_overload_t 
overload{};
    39 #include <type_traits>    62 template <
typename F, 
typename ...G>
    65     , overload_t<G...>::type
    67   using type = overload_t;
    68   using overload_t<F>::type::operator();
    69   using overload_t<G...>::type::operator();
    71   template <
typename F_, 
typename ...G_>
    72   constexpr 
explicit overload_t(F_&& f, G_&& ...g)
    73     : overload_t<F>::type(static_cast<F_&&>(f))
    74     , overload_t<G...>::type(static_cast<G_&&>(g)...)
    79 struct overload_t<F> { 
using type = F; };
    81 template <
typename R, 
typename ...Args>
    82 struct overload_t<R(*)(Args...)> {
    83   using type = overload_t;
    86   explicit constexpr overload_t(R (*fp)(Args...))
    90   constexpr R operator()(Args ...args)
 const    91   { 
return fptr_(static_cast<Args&&>(args)...); }
    94 struct make_overload_t {
    95   template <
typename ...F,
    96     typename Overload = 
typename overload_t<
    97       typename std::decay<F>::type...
   100   constexpr Overload operator()(F&& ...f)
 const {
   101     return Overload(static_cast<F&&>(f)...);
   112 #endif // BOOST_VERSION >= 106100   113 #endif // NDN_UTIL_OVERLOAD_HPP 
constexpr detail::make_overload_t overload