File indexing completed on 2025-10-31 08:33:37
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 #ifndef BOOST_ASIO_DETAIL_INITIATION_BASE_HPP
0012 #define BOOST_ASIO_DETAIL_INITIATION_BASE_HPP
0013 
0014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
0015 # pragma once
0016 #endif 
0017 
0018 #include <boost/asio/detail/config.hpp>
0019 #include <boost/asio/detail/type_traits.hpp>
0020 
0021 #include <boost/asio/detail/push_options.hpp>
0022 
0023 namespace boost {
0024 namespace asio {
0025 namespace detail {
0026 
0027 template <typename Initiation, typename = void>
0028 class initiation_base : public Initiation
0029 {
0030 public:
0031   template <typename I>
0032   explicit initiation_base(I&& initiation)
0033     : Initiation(static_cast<I&&>(initiation))
0034   {
0035   }
0036 };
0037 
0038 template <typename Initiation>
0039 class initiation_base<Initiation, enable_if_t<!is_class<Initiation>::value>>
0040 {
0041 public:
0042   template <typename I>
0043   explicit initiation_base(I&& initiation)
0044     : initiation_(static_cast<I&&>(initiation))
0045   {
0046   }
0047 
0048   template <typename... Args>
0049   void operator()(Args&&... args) const
0050   {
0051     initiation_(static_cast<Args&&>(args)...);
0052   }
0053 
0054 private:
0055   Initiation initiation_;
0056 };
0057 
0058 } 
0059 } 
0060 } 
0061 
0062 #include <boost/asio/detail/pop_options.hpp>
0063 
0064 #endif