File indexing completed on 2025-01-30 09:35:55
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef BOOST_FUNCTIONAL_VALUE_FACTORY_HPP
0011 #define BOOST_FUNCTIONAL_VALUE_FACTORY_HPP
0012
0013 #include <boost/config.hpp>
0014 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
0015 !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
0016 #include <utility>
0017 #endif
0018
0019 namespace boost {
0020
0021 template<class T>
0022 class value_factory;
0023
0024 template<class T>
0025 class value_factory {
0026 public:
0027 typedef T result_type;
0028
0029 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
0030 !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
0031 template<class... Args>
0032 result_type operator()(Args&&... args) const {
0033 return result_type(std::forward<Args>(args)...);
0034 }
0035 #else
0036 result_type operator()() const {
0037 return result_type();
0038 }
0039
0040 template<class A0>
0041 result_type operator()(A0& a0) const {
0042 return result_type(a0);
0043 }
0044
0045 template<class A0, class A1>
0046 result_type operator()(A0& a0, A1& a1) const {
0047 return result_type(a0, a1);
0048 }
0049
0050 template<class A0, class A1, class A2>
0051 result_type operator()(A0& a0, A1& a1, A2& a2) const {
0052 return result_type(a0, a1, a2);
0053 }
0054
0055 template<class A0, class A1, class A2, class A3>
0056 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3) const {
0057 return result_type(a0, a1, a2, a3);
0058 }
0059
0060 template<class A0, class A1, class A2, class A3, class A4>
0061 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4) const {
0062 return result_type(a0, a1, a2, a3, a4);
0063 }
0064
0065 template<class A0, class A1, class A2, class A3, class A4, class A5>
0066 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4,
0067 A5& a5) const {
0068 return result_type(a0, a1, a2, a3, a4, a5);
0069 }
0070
0071 template<class A0, class A1, class A2, class A3, class A4, class A5,
0072 class A6>
0073 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
0074 A6& a6) const {
0075 return result_type(a0, a1, a2, a3, a4, a5, a6);
0076 }
0077
0078 template<class A0, class A1, class A2, class A3, class A4, class A5,
0079 class A6, class A7>
0080 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
0081 A6& a6, A7& a7) const {
0082 return result_type(a0, a1, a2, a3, a4, a5, a6, a7);
0083 }
0084
0085 template<class A0, class A1, class A2, class A3, class A4, class A5,
0086 class A6, class A7, class A8>
0087 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
0088 A6& a6, A7& a7, A8& a8) const {
0089 return result_type(a0, a1, a2, a3, a4, a5, a6, a7, a8);
0090 }
0091
0092 template<class A0, class A1, class A2, class A3, class A4, class A5,
0093 class A6, class A7, class A8, class A9>
0094 result_type operator()(A0& a0, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5,
0095 A6& a6, A7& a7, A8& a8, A9& a9) const {
0096 return result_type(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
0097 }
0098 #endif
0099 };
0100
0101 template<class T>
0102 class value_factory<T&> { };
0103
0104 }
0105
0106 #endif