2 Copyright 2007 Tobias Schwinger
4 Copyright 2019 Glen Joseph Fernandes
7 Distributed under the Boost Software License, Version 1.0.
8 (http://www.boost.org/LICENSE_1_0.txt)
10 #ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_HPP
11 #define BOOST_FUNCTIONAL_VALUE_FACTORY_HPP
13 #include <boost/config.hpp>
14 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
15 !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
27 typedef T result_type;
29 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
30 !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
31 template<class... Args>
32 result_type operator()(Args&&... args) const {
33 return result_type(std::forward<Args>(args)...);
36 result_type operator()() const {
41 result_type operator()(A0& a0) const {
42 return result_type(a0);
45 template<class A0, class A1>
46 result_type operator()(A0& a0, A1& a1) const {
47 return result_type(a0, a1);
50 template<class A0, class A1, class A2>
51 result_type operator()(A0& a0, A1& a1, A2& a2) const {
52 return result_type(a0, a1, a2);
55 template<class A0, class A1, class A2, class A3>
56 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3) const {
57 return result_type(a0, a1, a2, a3);
60 template<class A0, class A1, class A2, class A3, class A4>
61 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4) const {
62 return result_type(a0, a1, a2, a3, a4);
65 template<class A0, class A1, class A2, class A3, class A4, class A5>
66 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4,
68 return result_type(a0, a1, a2, a3, a4, a5);
71 template<class A0, class A1, class A2, class A3, class A4, class A5,
73 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
75 return result_type(a0, a1, a2, a3, a4, a5, a6);
78 template<class A0, class A1, class A2, class A3, class A4, class A5,
80 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
81 A6& a6, A7& a7) const {
82 return result_type(a0, a1, a2, a3, a4, a5, a6, a7);
85 template<class A0, class A1, class A2, class A3, class A4, class A5,
86 class A6, class A7, class A8>
87 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
88 A6& a6, A7& a7, A8& a8) const {
89 return result_type(a0, a1, a2, a3, a4, a5, a6, a7, a8);
92 template<class A0, class A1, class A2, class A3, class A4, class A5,
93 class A6, class A7, class A8, class A9>
94 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
95 A6& a6, A7& a7, A8& a8, A9& a9) const {
96 return result_type(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
102 class value_factory<T&> { };