/* Copyright 2007 Tobias Schwinger Copyright 2019 Glen Joseph Fernandes (glenjofe@gmail.com) Distributed under the Boost Software License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_HPP #define BOOST_FUNCTIONAL_VALUE_FACTORY_HPP #include #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #include #endif namespace boost { template class value_factory; template class value_factory { public: typedef T result_type; #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template result_type operator()(Args&&... args) const { return result_type(std::forward(args)...); } #else result_type operator()() const { return result_type(); } template result_type operator()(A0& a0) const { return result_type(a0); } template result_type operator()(A0& a0, A1& a1) const { return result_type(a0, a1); } template result_type operator()(A0& a0, A1& a1, A2& a2) const { return result_type(a0, a1, a2); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3) const { return result_type(a0, a1, a2, a3); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4) const { return result_type(a0, a1, a2, a3, a4); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) const { return result_type(a0, a1, a2, a3, a4, a5); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) const { return result_type(a0, a1, a2, a3, a4, a5, a6); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) const { return result_type(a0, a1, a2, a3, a4, a5, a6, a7); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) const { return result_type(a0, a1, a2, a3, a4, a5, a6, a7, a8); } template result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) const { return result_type(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); } #endif }; template class value_factory { }; } /* boost */ #endif