]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | /* |
2 | Copyright 2007 Tobias Schwinger | |
3 | ||
4 | Copyright 2019 Glen Joseph Fernandes | |
5 | (glenjofe@gmail.com) | |
6 | ||
7 | Distributed under the Boost Software License, Version 1.0. | |
8 | (http://www.boost.org/LICENSE_1_0.txt) | |
9 | */ | |
10 | #ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_HPP | |
11 | #define BOOST_FUNCTIONAL_VALUE_FACTORY_HPP | |
12 | ||
13 | #include <boost/config.hpp> | |
14 | #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ | |
15 | !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) | |
16 | #include <utility> | |
17 | #endif | |
18 | ||
19 | namespace boost { | |
20 | ||
21 | template<class T> | |
22 | class value_factory; | |
23 | ||
24 | template<class T> | |
25 | class value_factory { | |
26 | public: | |
27 | typedef T result_type; | |
28 | ||
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)...); | |
34 | } | |
35 | #else | |
36 | result_type operator()() const { | |
37 | return result_type(); | |
38 | } | |
39 | ||
40 | template<class A0> | |
41 | result_type operator()(A0& a0) const { | |
42 | return result_type(a0); | |
43 | } | |
44 | ||
45 | template<class A0, class A1> | |
46 | result_type operator()(A0& a0, A1& a1) const { | |
47 | return result_type(a0, a1); | |
48 | } | |
49 | ||
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); | |
53 | } | |
54 | ||
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); | |
58 | } | |
59 | ||
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); | |
63 | } | |
64 | ||
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, | |
67 | A5& a5) const { | |
68 | return result_type(a0, a1, a2, a3, a4, a5); | |
69 | } | |
70 | ||
71 | template<class A0, class A1, class A2, class A3, class A4, class A5, | |
72 | class A6> | |
73 | result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, | |
74 | A6& a6) const { | |
75 | return result_type(a0, a1, a2, a3, a4, a5, a6); | |
76 | } | |
77 | ||
78 | template<class A0, class A1, class A2, class A3, class A4, class A5, | |
79 | class A6, class A7> | |
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); | |
83 | } | |
84 | ||
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); | |
90 | } | |
91 | ||
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); | |
7c673cae | 97 | } |
92f5a8d4 TL |
98 | #endif |
99 | }; | |
7c673cae | 100 | |
92f5a8d4 TL |
101 | template<class T> |
102 | class value_factory<T&> { }; | |
7c673cae | 103 | |
92f5a8d4 | 104 | } /* boost */ |
7c673cae | 105 | |
92f5a8d4 | 106 | #endif |