diff --git a/CMakeLists.txt b/CMakeLists.txt index af1aefe8..d5311f4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,39 +84,64 @@ LIST (APPEND msgpack_HEADERS IF (MSGPACK_ENABLE_CXX) LIST (APPEND msgpack_HEADERS include/msgpack.hpp - include/msgpack_forward.hpp + include/msgpack_fwd.hpp include/msgpack/adaptor/bool.hpp + include/msgpack/adaptor/bool_fwd.hpp include/msgpack/adaptor/char_ptr.hpp + include/msgpack/adaptor/char_ptr_fwd.hpp include/msgpack/adaptor/cpp11/array.hpp + include/msgpack/adaptor/cpp11/array_fwd.hpp include/msgpack/adaptor/cpp11/array_char.hpp + include/msgpack/adaptor/cpp11/array_char_fwd.hpp include/msgpack/adaptor/cpp11/forward_list.hpp + include/msgpack/adaptor/cpp11/forward_list_fwd.hpp include/msgpack/adaptor/cpp11/tuple.hpp + include/msgpack/adaptor/cpp11/tuple_fwd.hpp include/msgpack/adaptor/define.hpp include/msgpack/adaptor/deque.hpp + include/msgpack/adaptor/deque_fwd.hpp include/msgpack/adaptor/detail/cpp03_define.hpp include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp + include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp include/msgpack/adaptor/detail/cpp11_define.hpp include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp + include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp include/msgpack/adaptor/fixint.hpp + include/msgpack/adaptor/fixint_fwd.hpp include/msgpack/adaptor/float.hpp + include/msgpack/adaptor/float_fwd.hpp include/msgpack/adaptor/int.hpp + include/msgpack/adaptor/int_fwd.hpp include/msgpack/adaptor/list.hpp + include/msgpack/adaptor/list_fwd.hpp include/msgpack/adaptor/map.hpp + include/msgpack/adaptor/map_fwd.hpp include/msgpack/adaptor/msgpack_tuple.hpp + include/msgpack/adaptor/msgpack_tuple_fwd.hpp include/msgpack/adaptor/nil.hpp + include/msgpack/adaptor/nil_fwd.hpp include/msgpack/adaptor/pair.hpp + include/msgpack/adaptor/pair_fwd.hpp include/msgpack/adaptor/raw.hpp + include/msgpack/adaptor/raw_fwd.hpp include/msgpack/adaptor/set.hpp + include/msgpack/adaptor/set_fwd.hpp include/msgpack/adaptor/string.hpp + include/msgpack/adaptor/string_fwd.hpp include/msgpack/adaptor/tr1/unordered_map.hpp + include/msgpack/adaptor/tr1/unordered_map_fwd.hpp include/msgpack/adaptor/tr1/unordered_set.hpp + include/msgpack/adaptor/tr1/unordered_set_fwd.hpp include/msgpack/adaptor/vector.hpp + include/msgpack/adaptor/vector_fwd.hpp + include/msgpack/adaptor/vector_char.hpp + include/msgpack/adaptor/vector_char_fwd.hpp include/msgpack/cpp_config.hpp include/msgpack/detail/cpp03_zone.hpp include/msgpack/detail/cpp11_zone.hpp include/msgpack/fbuffer.hpp include/msgpack/object.hpp - include/msgpack/object_forward.hpp + include/msgpack/object_fwd.hpp include/msgpack/pack.hpp include/msgpack/sbuffer.hpp include/msgpack/type.hpp diff --git a/erb/cpp03_define.hpp.erb b/erb/cpp03_define.hpp.erb index e4350202..d52f8dda 100644 --- a/erb/cpp03_define.hpp.erb +++ b/erb/cpp03_define.hpp.erb @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/erb/cpp03_msgpack_tuple.hpp.erb b/erb/cpp03_msgpack_tuple.hpp.erb index 582762d2..a355dd77 100644 --- a/erb/cpp03_msgpack_tuple.hpp.erb +++ b/erb/cpp03_msgpack_tuple.hpp.erb @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" namespace msgpack { @@ -31,7 +31,7 @@ namespace type { // FIXME operator!= <% GENERATION_LIMIT = 31 %> -template , typename A<%=i%> = void<%}%>> +template , typename A<%=i%><%}%>> struct tuple; template @@ -128,7 +128,7 @@ inline tuple<> make_tuple() } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -tuple, A<%=j%><%}%>> make_tuple(typename tuple_type::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type>::transparent_reference a<%=j%><%}%>) +inline tuple, A<%=j%><%}%>> make_tuple(typename tuple_type::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type>::transparent_reference a<%=j%><%}%>) { return tuple, A<%=j%><%}%>>(a0<%1.upto(i) {|j|%>, a<%=j%><%}%>); } @@ -144,7 +144,7 @@ inline object const& operator>> ( } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple, A<%=j%><%}%>>& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -156,7 +156,7 @@ object const& operator>> ( <%}%> template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple<>&) { o.pack_array(0); @@ -164,7 +164,7 @@ const packer& operator<< ( } <%0.upto(GENERATION_LIMIT) {|i|%> template , typename A<%=j%><%}%>> -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple, A<%=j%><%}%>>& v) { o.pack_array(<%=i+1%>); diff --git a/erb/cpp03_msgpack_tuple_fwd.hpp.erb b/erb/cpp03_msgpack_tuple_fwd.hpp.erb new file mode 100644 index 00000000..99cefff0 --- /dev/null +++ b/erb/cpp03_msgpack_tuple_fwd.hpp.erb @@ -0,0 +1,125 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +// FIXME operator== +// FIXME operator!= +<% GENERATION_LIMIT = 31 %> + +template , typename A<%=i%> = void<%}%>> +struct tuple; + +template +struct tuple_element; + +template +struct const_tuple_element; + +template +struct tuple_type; + +<%0.upto(GENERATION_LIMIT) {|i|%> +<%0.upto(i) {|j|%> +template , typename A<%=k%><%}%>> +struct tuple_element, A<%=k%><%}%>>, <%=j%>>; +<%}%> +<%}%> + +<%0.upto(GENERATION_LIMIT) {|i|%> +<%0.upto(i) {|j|%> +template , typename A<%=k%><%}%>> +struct const_tuple_element, A<%=k%><%}%>>, <%=j%>>; +<%}%> +<%}%> + +template <> +struct tuple<>; +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +struct tuple, A<%=j%><%}%>>; + +template , typename A<%=j%><%}%>> +typename type::tuple_element, A<%=j%><%}%>>, N>::reference get(type::tuple, A<%=j%><%}%>>& t); +template , typename A<%=j%><%}%>> +typename type::const_tuple_element, A<%=j%><%}%>>, N>::const_reference get(type::tuple, A<%=j%><%}%>> const& t); +<%}%> + +tuple<> make_tuple(); +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +tuple, A<%=j%><%}%>> make_tuple(typename tuple_type::transparent_reference a0<%1.upto(i) {|j|%>, typename tuple_type>::transparent_reference a<%=j%><%}%>); +<%}%> + +} // namespace type + +object const& operator>> ( + object const& o, + type::tuple<>&); + +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +object const& operator>> ( + object const& o, + type::tuple, A<%=j%><%}%>>& v); +<%}%> + +template +const packer& operator<< ( + packer& o, + const type::tuple<>&); + +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +const packer& operator<< ( + packer& o, + const type::tuple, A<%=j%><%}%>>& v); +<%}%> + +void operator<< ( + object::with_zone& o, + const type::tuple<>&); +<%0.upto(GENERATION_LIMIT) {|i|%> +template , typename A<%=j%><%}%>> +void operator<< ( + object::with_zone& o, + const type::tuple, A<%=j%><%}%>>& v); +<%}%> + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + + +//std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v); +//<%0.upto(GENERATION_LIMIT) {|i|%> +//template , typename A<%=j%><%}%>> +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple, A<%=j%><%}%>>& v); +//<%}%> + +#endif // MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP diff --git a/erb/cpp03_zone.hpp.erb b/erb/cpp03_zone.hpp.erb index 69261065..ed4d263e 100644 --- a/erb/cpp03_zone.hpp.erb +++ b/erb/cpp03_zone.hpp.erb @@ -23,7 +23,7 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/adaptor/bool.hpp b/include/msgpack/adaptor/bool.hpp index 1d794dd1..5194b828 100644 --- a/include/msgpack/adaptor/bool.hpp +++ b/include/msgpack/adaptor/bool.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_BOOL_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -55,4 +55,4 @@ inline void operator<< (object::with_zone& o, bool v) } // namespace msgpack -#endif /* msgpack/type/bool.hpp */ +#endif // MSGPACK_TYPE_BOOL_HPP diff --git a/include/msgpack/adaptor/bool_fwd.hpp b/include/msgpack/adaptor/bool_fwd.hpp new file mode 100644 index 00000000..aecde517 --- /dev/null +++ b/include/msgpack/adaptor/bool_fwd.hpp @@ -0,0 +1,39 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_BOOL_FWD_HPP +#define MSGPACK_TYPE_BOOL_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, bool& v); +template +packer& operator<< (packer& o, const bool& v); +void operator<< (object& o, bool v); +void operator<< (object::with_zone& o, bool v); + + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_BOOL_FWD_HPP diff --git a/include/msgpack/adaptor/char_ptr.hpp b/include/msgpack/adaptor/char_ptr.hpp index cf013b34..c1071462 100644 --- a/include/msgpack/adaptor/char_ptr.hpp +++ b/include/msgpack/adaptor/char_ptr.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_CHAR_PTR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/char_ptr_fwd.hpp b/include/msgpack/adaptor/char_ptr_fwd.hpp new file mode 100644 index 00000000..f6290e6a --- /dev/null +++ b/include/msgpack/adaptor/char_ptr_fwd.hpp @@ -0,0 +1,38 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_CHAR_PTR_FWD_HPP +#define MSGPACK_TYPE_CHAR_PTR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +packer& operator<< (packer& o, const char* v); +void operator<< (object::with_zone& o, const char* v); +void operator<< (object& o, const char* v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_CHAR_PTR_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/array.hpp b/include/msgpack/adaptor/cpp11/array.hpp index e9e1c972..573ff2d2 100644 --- a/include/msgpack/adaptor/cpp11/array.hpp +++ b/include/msgpack/adaptor/cpp11/array.hpp @@ -20,7 +20,7 @@ #define MSGPACK_CPP11_ARRAY_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/cpp11/array_char.hpp b/include/msgpack/adaptor/cpp11/array_char.hpp index 34aa2761..9df71bb1 100644 --- a/include/msgpack/adaptor/cpp11/array_char.hpp +++ b/include/msgpack/adaptor/cpp11/array_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_ARRAY_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/cpp11/array_char_fwd.hpp b/include/msgpack/adaptor/cpp11/array_char_fwd.hpp new file mode 100644 index 00000000..5f64e522 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/array_char_fwd.hpp @@ -0,0 +1,45 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP +#define MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::array& v); + +template +packer& operator<< (packer& o, const std::array& v); + +template +void operator<< (object& o, const std::array& v); + +template +void operator<< (object::with_zone& o, const std::array& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_ARRAY_CHAR_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/array_fwd.hpp b/include/msgpack/adaptor/cpp11/array_fwd.hpp new file mode 100644 index 00000000..815694b4 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/array_fwd.hpp @@ -0,0 +1,44 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef MSGPACK_CPP11_ARRAY_FWD_HPP +#define MSGPACK_CPP11_ARRAY_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::array& v); + +template +packer& operator<< (packer& o, const std::array& v); + +template +void operator<< (object::with_zone& o, const std::array& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_ARRAY_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/forward_list.hpp b/include/msgpack/adaptor/cpp11/forward_list.hpp index d2dbebb9..6f52365d 100644 --- a/include/msgpack/adaptor/cpp11/forward_list.hpp +++ b/include/msgpack/adaptor/cpp11/forward_list.hpp @@ -20,7 +20,7 @@ #define MSGPACK_CPP11_FORWARD_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp b/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp new file mode 100644 index 00000000..47ca34a2 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/forward_list_fwd.hpp @@ -0,0 +1,44 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#ifndef MSGPACK_CPP11_FORWARD_LIST_FWD_HPP +#define MSGPACK_CPP11_FORWARD_LIST_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::forward_list& v); + +template +packer& operator<< (packer& o, const std::forward_list& v); + +template +void operator<< (object::with_zone& o, const std::forward_list& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_FORWARD_LIST_FWD_HPP diff --git a/include/msgpack/adaptor/cpp11/tuple.hpp b/include/msgpack/adaptor/cpp11/tuple.hpp index 704d81ab..0e1a03cd 100644 --- a/include/msgpack/adaptor/cpp11/tuple.hpp +++ b/include/msgpack/adaptor/cpp11/tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include @@ -57,7 +57,7 @@ struct StdTuplePacker { template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const std::tuple& v) { o.pack_array(sizeof...(Args)); @@ -95,7 +95,7 @@ struct StdTupleConverter { }; template -object const& operator>> ( +inline object const& operator>> ( object const& o, std::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } diff --git a/include/msgpack/adaptor/cpp11/tuple_fwd.hpp b/include/msgpack/adaptor/cpp11/tuple_fwd.hpp new file mode 100644 index 00000000..f17ac289 --- /dev/null +++ b/include/msgpack/adaptor/cpp11/tuple_fwd.hpp @@ -0,0 +1,62 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP11_TUPLE_FWD_HPP +#define MSGPACK_CPP11_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +// --- Pack ( from tuple to packer stream --- +template +struct StdTuplePacker; + +template +const packer& operator<< ( + packer& o, + const std::tuple& v); + +// --- Convert from tuple to object --- + +template +struct StdTupleConverter; + +template +object const& operator>> ( + object const& o, + std::tuple& v); + +// --- Convert from tuple to object with zone --- +template +struct StdTupleToObjectWithZone; + +template +void operator<< ( + object::with_zone& o, + std::tuple const& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/deque.hpp b/include/msgpack/adaptor/deque.hpp index 364baff3..fc0bbbf7 100644 --- a/include/msgpack/adaptor/deque.hpp +++ b/include/msgpack/adaptor/deque.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_DEQUE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/deque_fwd.hpp b/include/msgpack/adaptor/deque_fwd.hpp new file mode 100644 index 00000000..81a88189 --- /dev/null +++ b/include/msgpack/adaptor/deque_fwd.hpp @@ -0,0 +1,40 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_DEQUE_FWD_HPP +#define MSGPACK_TYPE_DEQUE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::deque& v); +template +packer& operator<< (packer& o, const std::deque& v); +template +void operator<< (object::with_zone& o, const std::deque& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_DEQUE_FWD_HPP diff --git a/include/msgpack/adaptor/detail/cpp03_define.hpp b/include/msgpack/adaptor/detail/cpp03_define.hpp index d9090236..442837cb 100644 --- a/include/msgpack/adaptor/detail/cpp03_define.hpp +++ b/include/msgpack/adaptor/detail/cpp03_define.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #define MSGPACK_DEFINE(...) \ template \ diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp index 3ffd0e29..7b9b29a1 100644 --- a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP03_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" namespace msgpack { @@ -31,7 +31,7 @@ namespace type { // FIXME operator!= -template +template struct tuple; template @@ -10389,193 +10389,193 @@ inline tuple<> make_tuple() } template -tuple make_tuple(typename tuple_type::transparent_reference a0) +inline tuple make_tuple(typename tuple_type::transparent_reference a0) { return tuple(a0); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1) { return tuple(a0, a1); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2) { return tuple(a0, a1, a2); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3) { return tuple(a0, a1, a2, a3); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4) { return tuple(a0, a1, a2, a3, a4); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5) { return tuple(a0, a1, a2, a3, a4, a5); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6) { return tuple(a0, a1, a2, a3, a4, a5, a6); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30); } template -tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31) +inline tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31) { return tuple(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31); } @@ -10591,7 +10591,7 @@ inline object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10602,7 +10602,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10614,7 +10614,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10627,7 +10627,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10641,7 +10641,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10656,7 +10656,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10672,7 +10672,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10689,7 +10689,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10707,7 +10707,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10726,7 +10726,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10746,7 +10746,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10767,7 +10767,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10789,7 +10789,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10812,7 +10812,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10836,7 +10836,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10861,7 +10861,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10887,7 +10887,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10914,7 +10914,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10942,7 +10942,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -10971,7 +10971,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11001,7 +11001,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11032,7 +11032,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11064,7 +11064,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11097,7 +11097,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11131,7 +11131,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11166,7 +11166,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11202,7 +11202,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11239,7 +11239,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11277,7 +11277,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11316,7 +11316,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11356,7 +11356,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11397,7 +11397,7 @@ object const& operator>> ( } template -object const& operator>> ( +inline object const& operator>> ( object const& o, type::tuple& v) { if(o.type != type::ARRAY) { throw type_error(); } @@ -11440,7 +11440,7 @@ object const& operator>> ( template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple<>&) { o.pack_array(0); @@ -11448,7 +11448,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(1); @@ -11458,7 +11458,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(2); @@ -11469,7 +11469,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(3); @@ -11481,7 +11481,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(4); @@ -11494,7 +11494,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(5); @@ -11508,7 +11508,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(6); @@ -11523,7 +11523,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(7); @@ -11539,7 +11539,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(8); @@ -11556,7 +11556,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(9); @@ -11574,7 +11574,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(10); @@ -11593,7 +11593,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(11); @@ -11613,7 +11613,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(12); @@ -11634,7 +11634,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(13); @@ -11656,7 +11656,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(14); @@ -11679,7 +11679,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(15); @@ -11703,7 +11703,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(16); @@ -11728,7 +11728,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(17); @@ -11754,7 +11754,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(18); @@ -11781,7 +11781,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(19); @@ -11809,7 +11809,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(20); @@ -11838,7 +11838,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(21); @@ -11868,7 +11868,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(22); @@ -11899,7 +11899,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(23); @@ -11931,7 +11931,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(24); @@ -11964,7 +11964,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(25); @@ -11998,7 +11998,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(26); @@ -12033,7 +12033,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(27); @@ -12069,7 +12069,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(28); @@ -12106,7 +12106,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(29); @@ -12144,7 +12144,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(30); @@ -12183,7 +12183,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(31); @@ -12223,7 +12223,7 @@ const packer& operator<< ( } template -const packer& operator<< ( +inline const packer& operator<< ( packer& o, const type::tuple& v) { o.pack_array(32); diff --git a/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp new file mode 100644 index 00000000..da8a9f26 --- /dev/null +++ b/include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp @@ -0,0 +1,4341 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2013 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +// FIXME operator== +// FIXME operator!= + + +template +struct tuple; + +template +struct tuple_element; + +template +struct const_tuple_element; + +template +struct tuple_type; + + + +template +struct tuple_element, 0>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + +template +struct tuple_element, 29>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + +template +struct tuple_element, 29>; + +template +struct tuple_element, 30>; + + + +template +struct tuple_element, 0>; + +template +struct tuple_element, 1>; + +template +struct tuple_element, 2>; + +template +struct tuple_element, 3>; + +template +struct tuple_element, 4>; + +template +struct tuple_element, 5>; + +template +struct tuple_element, 6>; + +template +struct tuple_element, 7>; + +template +struct tuple_element, 8>; + +template +struct tuple_element, 9>; + +template +struct tuple_element, 10>; + +template +struct tuple_element, 11>; + +template +struct tuple_element, 12>; + +template +struct tuple_element, 13>; + +template +struct tuple_element, 14>; + +template +struct tuple_element, 15>; + +template +struct tuple_element, 16>; + +template +struct tuple_element, 17>; + +template +struct tuple_element, 18>; + +template +struct tuple_element, 19>; + +template +struct tuple_element, 20>; + +template +struct tuple_element, 21>; + +template +struct tuple_element, 22>; + +template +struct tuple_element, 23>; + +template +struct tuple_element, 24>; + +template +struct tuple_element, 25>; + +template +struct tuple_element, 26>; + +template +struct tuple_element, 27>; + +template +struct tuple_element, 28>; + +template +struct tuple_element, 29>; + +template +struct tuple_element, 30>; + +template +struct tuple_element, 31>; + + + + + +template +struct const_tuple_element, 0>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + +template +struct const_tuple_element, 29>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + +template +struct const_tuple_element, 29>; + +template +struct const_tuple_element, 30>; + + + +template +struct const_tuple_element, 0>; + +template +struct const_tuple_element, 1>; + +template +struct const_tuple_element, 2>; + +template +struct const_tuple_element, 3>; + +template +struct const_tuple_element, 4>; + +template +struct const_tuple_element, 5>; + +template +struct const_tuple_element, 6>; + +template +struct const_tuple_element, 7>; + +template +struct const_tuple_element, 8>; + +template +struct const_tuple_element, 9>; + +template +struct const_tuple_element, 10>; + +template +struct const_tuple_element, 11>; + +template +struct const_tuple_element, 12>; + +template +struct const_tuple_element, 13>; + +template +struct const_tuple_element, 14>; + +template +struct const_tuple_element, 15>; + +template +struct const_tuple_element, 16>; + +template +struct const_tuple_element, 17>; + +template +struct const_tuple_element, 18>; + +template +struct const_tuple_element, 19>; + +template +struct const_tuple_element, 20>; + +template +struct const_tuple_element, 21>; + +template +struct const_tuple_element, 22>; + +template +struct const_tuple_element, 23>; + +template +struct const_tuple_element, 24>; + +template +struct const_tuple_element, 25>; + +template +struct const_tuple_element, 26>; + +template +struct const_tuple_element, 27>; + +template +struct const_tuple_element, 28>; + +template +struct const_tuple_element, 29>; + +template +struct const_tuple_element, 30>; + +template +struct const_tuple_element, 31>; + + + +template <> +struct tuple<>; + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + +template +struct tuple; + +template +typename type::tuple_element, N>::reference get(type::tuple& t); +template +typename type::const_tuple_element, N>::const_reference get(type::tuple const& t); + + +tuple<> make_tuple(); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30); + +template +tuple make_tuple(typename tuple_type::transparent_reference a0, typename tuple_type::transparent_reference a1, typename tuple_type::transparent_reference a2, typename tuple_type::transparent_reference a3, typename tuple_type::transparent_reference a4, typename tuple_type::transparent_reference a5, typename tuple_type::transparent_reference a6, typename tuple_type::transparent_reference a7, typename tuple_type::transparent_reference a8, typename tuple_type::transparent_reference a9, typename tuple_type::transparent_reference a10, typename tuple_type::transparent_reference a11, typename tuple_type::transparent_reference a12, typename tuple_type::transparent_reference a13, typename tuple_type::transparent_reference a14, typename tuple_type::transparent_reference a15, typename tuple_type::transparent_reference a16, typename tuple_type::transparent_reference a17, typename tuple_type::transparent_reference a18, typename tuple_type::transparent_reference a19, typename tuple_type::transparent_reference a20, typename tuple_type::transparent_reference a21, typename tuple_type::transparent_reference a22, typename tuple_type::transparent_reference a23, typename tuple_type::transparent_reference a24, typename tuple_type::transparent_reference a25, typename tuple_type::transparent_reference a26, typename tuple_type::transparent_reference a27, typename tuple_type::transparent_reference a28, typename tuple_type::transparent_reference a29, typename tuple_type::transparent_reference a30, typename tuple_type::transparent_reference a31); + + +} // namespace type + +object const& operator>> ( + object const& o, + type::tuple<>&); + + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +template +object const& operator>> ( + object const& o, + type::tuple& v); + + +template +const packer& operator<< ( + packer& o, + const type::tuple<>&); + + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + + +void operator<< ( + object::with_zone& o, + const type::tuple<>&); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + +template +void operator<< ( + object::with_zone& o, + const type::tuple& v); + + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + + +//std::ostream& operator<< (std::ostream& o, const msgpack::type::tuple<>& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// +//template +//std::ostream& operator<< (std::ostream& o, +// const msgpack::type::tuple& v); +// + +#endif // MSGPACK_CPP03_MSGPACK_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/detail/cpp11_define.hpp b/include/msgpack/adaptor/detail/cpp11_define.hpp index b8a0979f..2b0b28be 100644 --- a/include/msgpack/adaptor/detail/cpp11_define.hpp +++ b/include/msgpack/adaptor/detail/cpp11_define.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_DEFINE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 4f190a86..9532021d 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -19,7 +19,7 @@ #define MSGPACK_CPP11_MSGPACK_TUPLE_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp new file mode 100644 index 00000000..b9f148ef --- /dev/null +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp @@ -0,0 +1,84 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + // tuple + using std::get; + using std::tuple_size; + using std::tuple_element; + using std::uses_allocator; + using std::ignore; + using std::make_tuple; + using std::tie; + using std::forward_as_tuple; + using std::swap; + + template< class... Types > + class tuple; + + template< class... Tuples > + auto tuple_cat(Tuples&&... args) -> + decltype( + std::tuple_cat(std::forward::type::base>(args)...) + ); +} // namespace type + +// --- Pack ( from tuple to packer stream --- +template +struct MsgpackTuplePacker; + +template +const packer& operator<< ( + packer& o, + const type::tuple& v); + +// --- Convert from tuple to object --- + +template +struct MsgpackTupleConverter; + +template +object const& operator>> ( + object const& o, + type::tuple& v); + +// --- Convert from tuple to object with zone --- +template +struct MsgpackTupleToObjectWithZone; + +template +void operator<< ( + object::with_zone& o, + type::tuple const& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_CPP11_MSGPACK_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/fixint.hpp b/include/msgpack/adaptor/fixint.hpp index ca5e6b02..83a9e95c 100644 --- a/include/msgpack/adaptor/fixint.hpp +++ b/include/msgpack/adaptor/fixint.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FIXINT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include "msgpack/adaptor/int.hpp" namespace msgpack { diff --git a/include/msgpack/adaptor/fixint_fwd.hpp b/include/msgpack/adaptor/fixint_fwd.hpp new file mode 100644 index 00000000..cad85ebe --- /dev/null +++ b/include/msgpack/adaptor/fixint_fwd.hpp @@ -0,0 +1,100 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_FIXINT_FWD_HPP +#define MSGPACK_TYPE_FIXINT_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + + +template +struct fix_int; + +typedef fix_int fix_uint8; +typedef fix_int fix_uint16; +typedef fix_int fix_uint32; +typedef fix_int fix_uint64; + +typedef fix_int fix_int8; +typedef fix_int fix_int16; +typedef fix_int fix_int32; +typedef fix_int fix_int64; + + +} // namespace type + + +object const& operator>> (object const& o, type::fix_int8& v); +object const& operator>> (object const& o, type::fix_int16& v); +object const& operator>> (object const& o, type::fix_int32& v); +object const& operator>> (object const& o, type::fix_int64& v); + +object const& operator>> (object const& o, type::fix_uint8& v); +object const& operator>> (object const& o, type::fix_uint16& v); +object const& operator>> (object const& o, type::fix_uint32& v); +object const& operator>> (object const& o, type::fix_uint64& v); + +template +packer& operator<< (packer& o, const type::fix_int8& v); +template +packer& operator<< (packer& o, const type::fix_int16& v); +template +packer& operator<< (packer& o, const type::fix_int32& v); +template +packer& operator<< (packer& o, const type::fix_int64& v); + +template +packer& operator<< (packer& o, const type::fix_uint8& v); +template +packer& operator<< (packer& o, const type::fix_uint16& v); +template +packer& operator<< (packer& o, const type::fix_uint32& v); +template +packer& operator<< (packer& o, const type::fix_uint64& v); + +void operator<< (object& o, type::fix_int8 v); +void operator<< (object& o, type::fix_int16 v); +void operator<< (object& o, type::fix_int32 v); +void operator<< (object& o, type::fix_int64 v); + +void operator<< (object& o, type::fix_uint8 v); +void operator<< (object& o, type::fix_uint16 v); +void operator<< (object& o, type::fix_uint32 v); +void operator<< (object& o, type::fix_uint64 v); + +void operator<< (object::with_zone& o, type::fix_int8 v); +void operator<< (object::with_zone& o, type::fix_int16 v); +void operator<< (object::with_zone& o, type::fix_int32 v); +void operator<< (object::with_zone& o, type::fix_int64 v); + +void operator<< (object::with_zone& o, type::fix_uint8 v); +void operator<< (object::with_zone& o, type::fix_uint16 v); +void operator<< (object::with_zone& o, type::fix_uint32 v); +void operator<< (object::with_zone& o, type::fix_uint64 v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_FIXINT_FWD_HPP diff --git a/include/msgpack/adaptor/float.hpp b/include/msgpack/adaptor/float.hpp index bbace593..499cbbe0 100644 --- a/include/msgpack/adaptor/float.hpp +++ b/include/msgpack/adaptor/float.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_FLOAT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -102,4 +102,4 @@ inline void operator<< (object::with_zone& o, double v) } // namespace msgpack -#endif /* msgpack/type/float.hpp */ +#endif // MSGPACK_TYPE_FLOAT_HPP diff --git a/include/msgpack/adaptor/float_fwd.hpp b/include/msgpack/adaptor/float_fwd.hpp new file mode 100644 index 00000000..5eb9bafb --- /dev/null +++ b/include/msgpack/adaptor/float_fwd.hpp @@ -0,0 +1,44 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_FLOAT_FWD_HPP +#define MSGPACK_TYPE_FLOAT_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, float& v); +template +packer& operator<< (packer& o, const float& v); +object const& operator>> (object const& o, double& v); +template +packer& operator<< (packer& o, const double& v); +void operator<< (object& o, float v); +void operator<< (object& o, double v); +void operator<< (object::with_zone& o, float v); +void operator<< (object::with_zone& o, double v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_FLOAT_FWD_HPP diff --git a/include/msgpack/adaptor/int.hpp b/include/msgpack/adaptor/int.hpp index 6491d274..51c0021e 100644 --- a/include/msgpack/adaptor/int.hpp +++ b/include/msgpack/adaptor/int.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_INT_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/int_fwd.hpp b/include/msgpack/adaptor/int_fwd.hpp new file mode 100644 index 00000000..682f6b8e --- /dev/null +++ b/include/msgpack/adaptor/int_fwd.hpp @@ -0,0 +1,100 @@ +// +// MessagePack for C++ forward declaration +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_INT_FWD_HPP +#define MSGPACK_TYPE_INT_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1){ + +object const& operator>> (object const& o, char& v); + +object const& operator>> (object const& o, signed char& v); +object const& operator>> (object const& o, signed short& v); +object const& operator>> (object const& o, signed int& v); +object const& operator>> (object const& o, signed long& v); +object const& operator>> (object const& o, signed long long& v); + +object const& operator>> (object const& o, unsigned char& v); +object const& operator>> (object const& o, unsigned short& v); +object const& operator>> (object const& o, unsigned int& v); +object const& operator>> (object const& o, unsigned long& v); +object const& operator>> (object const& o, unsigned long long& v); + +template +packer& operator<< (packer& o, char v); + +template +packer& operator<< (packer& o, signed char v); +template +packer& operator<< (packer& o, signed short v); +template +packer& operator<< (packer& o, signed int v); +template +packer& operator<< (packer& o, signed long v); +template +packer& operator<< (packer& o, signed long long v); + +template +packer& operator<< (packer& o, unsigned char v); +template +packer& operator<< (packer& o, unsigned short v); +template +packer& operator<< (packer& o, unsigned int v); +template +packer& operator<< (packer& o, unsigned long v); +template +packer& operator<< (packer& o, unsigned long long v); + + +void operator<< (object& o, char v); + +void operator<< (object& o, signed char v); +void operator<< (object& o, signed short v); +void operator<< (object& o, signed int v); +void operator<< (object& o, signed long v); +void operator<< (object& o, signed long long v); + +void operator<< (object& o, unsigned char v); +void operator<< (object& o, unsigned short v); +void operator<< (object& o, unsigned int v); +void operator<< (object& o, unsigned long v); +void operator<< (object& o, unsigned long long v); + +void operator<< (object::with_zone& o, char v); + +void operator<< (object::with_zone& o, signed char v); +void operator<< (object::with_zone& o, signed short v); +void operator<< (object::with_zone& o, signed int v); +void operator<< (object::with_zone& o, signed long v); +void operator<< (object::with_zone& o, const signed long long& v); + +void operator<< (object::with_zone& o, unsigned char v); +void operator<< (object::with_zone& o, unsigned short v); +void operator<< (object::with_zone& o, unsigned int v); +void operator<< (object::with_zone& o, unsigned long v); +void operator<< (object::with_zone& o, const unsigned long long& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_INT_FWD_HPP diff --git a/include/msgpack/adaptor/list.hpp b/include/msgpack/adaptor/list.hpp index b7690dd7..b185fa24 100644 --- a/include/msgpack/adaptor/list.hpp +++ b/include/msgpack/adaptor/list.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_LIST_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -76,4 +76,4 @@ inline void operator<< (object::with_zone& o, const std::list& v) } // namespace msgpack -#endif /* msgpack/type/list.hpp */ +#endif // MSGPACK_TYPE_LIST_HPP diff --git a/include/msgpack/adaptor/list_fwd.hpp b/include/msgpack/adaptor/list_fwd.hpp new file mode 100644 index 00000000..814a21a0 --- /dev/null +++ b/include/msgpack/adaptor/list_fwd.hpp @@ -0,0 +1,40 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_LIST_FWD_HPP +#define MSGPACK_TYPE_LIST_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::list& v); +template +packer& operator<< (packer& o, const std::list& v); +template +void operator<< (object::with_zone& o, const std::list& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_LIST_FWD_HPP diff --git a/include/msgpack/adaptor/map.hpp b/include/msgpack/adaptor/map.hpp index de9f825e..16b600d8 100644 --- a/include/msgpack/adaptor/map.hpp +++ b/include/msgpack/adaptor/map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include #include #include @@ -204,4 +204,4 @@ inline void operator<< (object::with_zone& o, const std::multimap& v) } // namespace msgpack -#endif /* msgpack/type/map.hpp */ +#endif // MSGPACK_TYPE_MAP_HPP diff --git a/include/msgpack/adaptor/map_fwd.hpp b/include/msgpack/adaptor/map_fwd.hpp new file mode 100644 index 00000000..fe5cc6b0 --- /dev/null +++ b/include/msgpack/adaptor/map_fwd.hpp @@ -0,0 +1,69 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_MAP_FWD_HPP +#define MSGPACK_TYPE_MAP_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include +#include +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +template +class assoc_vector; + +namespace detail { + template + struct pair_first_less; +} // namespace detail + +} // namespace type + + +template +object const& operator>> (object const& o, type::assoc_vector& v); +template +packer& operator<< (packer& o, const type::assoc_vector& v); +template +void operator<< (object::with_zone& o, const type::assoc_vector& v); + +template +object const& operator>> (object const& o, std::map& v); +template +packer& operator<< (packer& o, const std::map& v); +template +void operator<< (object::with_zone& o, const std::map& v); + +template +object const& operator>> (object const& o, std::multimap& v); +template +packer& operator<< (packer& o, const std::multimap& v); +template +void operator<< (object::with_zone& o, const std::multimap& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_MAP_HPP diff --git a/include/msgpack/adaptor/msgpack_tuple_fwd.hpp b/include/msgpack/adaptor/msgpack_tuple_fwd.hpp new file mode 100644 index 00000000..12ea8e9b --- /dev/null +++ b/include/msgpack/adaptor/msgpack_tuple_fwd.hpp @@ -0,0 +1,29 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_MSGPACK_TUPLE_FWD_HPP +#define MSGPACK_MSGPACK_TUPLE_FWD_HPP + +#include "msgpack/cpp_config.hpp" + +#if defined(MSGPACK_USE_CPP03) +#include "detail/cpp03_msgpack_tuple_fwd.hpp" +#else // MSGPACK_USE_CPP03 +#include "detail/cpp11_msgpack_tuple_fwd.hpp" +#endif // MSGPACK_USE_CPP03 + +#endif // MSGPACK_MSGPACK_TUPLE_FWD_HPP diff --git a/include/msgpack/adaptor/nil.hpp b/include/msgpack/adaptor/nil.hpp index c8f2a0c7..1889307a 100644 --- a/include/msgpack/adaptor/nil.hpp +++ b/include/msgpack/adaptor/nil.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_NIL_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" namespace msgpack { @@ -65,4 +65,4 @@ inline void object::as() const } // namespace msgpack -#endif /* msgpack/type/nil.hpp */ +#endif // MSGPACK_TYPE_NIL_HPP diff --git a/include/msgpack/adaptor/nil_fwd.hpp b/include/msgpack/adaptor/nil_fwd.hpp new file mode 100644 index 00000000..80d14860 --- /dev/null +++ b/include/msgpack/adaptor/nil_fwd.hpp @@ -0,0 +1,51 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_NIL_FWD_HPP +#define MSGPACK_TYPE_NIL_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +struct nil; + +} // namespace type + + +object const& operator>> (object const& o, type::nil&); + +template +packer& operator<< (packer& o, const type::nil&); + +void operator<< (object& o, type::nil); + +void operator<< (object::with_zone& o, type::nil v); + +template <> +inline void object::as() const; + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_NIL_FWD_HPP diff --git a/include/msgpack/adaptor/pair.hpp b/include/msgpack/adaptor/pair.hpp index 238abb8e..9efc1892 100644 --- a/include/msgpack/adaptor/pair.hpp +++ b/include/msgpack/adaptor/pair.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_PAIR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -60,4 +60,4 @@ inline void operator<< (object::with_zone& o, const std::pair& v) } // namespace msgpack -#endif /* msgpack/type/pair.hpp */ +#endif // MSGPACK_TYPE_PAIR_HPP diff --git a/include/msgpack/adaptor/pair_fwd.hpp b/include/msgpack/adaptor/pair_fwd.hpp new file mode 100644 index 00000000..d6d84d39 --- /dev/null +++ b/include/msgpack/adaptor/pair_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_PAIR_FWD_HPP +#define MSGPACK_TYPE_PAIR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::pair& v); + +template +packer& operator<< (packer& o, const std::pair& v); + +template +void operator<< (object::with_zone& o, const std::pair& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_PAIR_FWD_HPP diff --git a/include/msgpack/adaptor/raw.hpp b/include/msgpack/adaptor/raw.hpp index 52790519..a01a72c8 100644 --- a/include/msgpack/adaptor/raw.hpp +++ b/include/msgpack/adaptor/raw.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_RAW_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include #include @@ -95,4 +95,4 @@ inline void operator<< (object::with_zone& o, const type::raw_ref& v) } // namespace msgpack -#endif /* msgpack/type/raw.hpp */ +#endif // MSGPACK_TYPE_RAW_HPP diff --git a/include/msgpack/adaptor/raw_fwd.hpp b/include/msgpack/adaptor/raw_fwd.hpp new file mode 100644 index 00000000..26f83434 --- /dev/null +++ b/include/msgpack/adaptor/raw_fwd.hpp @@ -0,0 +1,50 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_RAW_FWD_HPP +#define MSGPACK_TYPE_RAW_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +namespace type { + +struct raw_ref; + +} // namespace type + + +object const& operator>> (object const& o, type::raw_ref& v); + +template +packer& operator<< (packer& o, const type::raw_ref& v); + +void operator<< (object& o, const type::raw_ref& v); + +void operator<< (object::with_zone& o, const type::raw_ref& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_RAW_FWD_HPP diff --git a/include/msgpack/adaptor/set.hpp b/include/msgpack/adaptor/set.hpp index a01b1618..2e154fdb 100644 --- a/include/msgpack/adaptor/set.hpp +++ b/include/msgpack/adaptor/set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include @@ -122,4 +122,4 @@ inline void operator<< (object::with_zone& o, const std::multiset& v) } // namespace msgpack -#endif /* msgpack/type/set.hpp */ +#endif // MSGPACK_TYPE_SET_HPP diff --git a/include/msgpack/adaptor/set_fwd.hpp b/include/msgpack/adaptor/set_fwd.hpp new file mode 100644 index 00000000..ae5712f8 --- /dev/null +++ b/include/msgpack/adaptor/set_fwd.hpp @@ -0,0 +1,52 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_SET_FWD_HPP +#define MSGPACK_TYPE_SET_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::set& v); + +template +packer& operator<< (packer& o, const std::set& v); + +template +void operator<< (object::with_zone& o, const std::set& v); + +template +object const& operator>> (object const& o, std::multiset& v); + +template +packer& operator<< (packer& o, const std::multiset& v); + +template +void operator<< (object::with_zone& o, const std::multiset& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_SET_FWD_HPP diff --git a/include/msgpack/adaptor/string.hpp b/include/msgpack/adaptor/string.hpp index 66068361..dd4a37a9 100644 --- a/include/msgpack/adaptor/string.hpp +++ b/include/msgpack/adaptor/string.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_STRING_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -70,4 +70,4 @@ inline void operator<< (object& o, const std::string& v) } // namespace msgpack -#endif /* msgpack/type/string.hpp */ +#endif // MSGPACK_TYPE_STRING_HPP diff --git a/include/msgpack/adaptor/string_fwd.hpp b/include/msgpack/adaptor/string_fwd.hpp new file mode 100644 index 00000000..471654e6 --- /dev/null +++ b/include/msgpack/adaptor/string_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_STRING_FWD_HPP +#define MSGPACK_TYPE_STRING_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, std::string& v); + +template +packer& operator<< (packer& o, const std::string& v); + +void operator<< (object::with_zone& o, const std::string& v); + +void operator<< (object& o, const std::string& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_STRING_FWD_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_map.hpp b/include/msgpack/adaptor/tr1/unordered_map.hpp index 77399581..de24a11c 100644 --- a/include/msgpack/adaptor/tr1/unordered_map.hpp +++ b/include/msgpack/adaptor/tr1/unordered_map.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -149,4 +149,4 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m #undef MSGPACK_STD_TR1 -#endif /* msgpack/type/map.hpp */ +#endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp new file mode 100644 index 00000000..99801e96 --- /dev/null +++ b/include/msgpack/adaptor/tr1/unordered_map_fwd.hpp @@ -0,0 +1,72 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2014 FURUHASHI Sadayuki and KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP +#define MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#define MSGPACK_HAS_STD_UNOURDERED_MAP +#include +#define MSGPACK_STD_TR1 std + +#else // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#if __GNUC__ >= 4 + +#define MSGPACK_HAS_STD_TR1_UNOURDERED_MAP + +#include +#define MSGPACK_STD_TR1 std::tr1 + +#endif // __GNUC__ >= 4 + +#endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_map& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_map& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_map& v); + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_multimap& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_multimap& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_multimap& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#undef MSGPACK_STD_TR1 + +#endif // MSGPACK_TYPE_TR1_UNORDERED_MAP_FWD_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_set.hpp b/include/msgpack/adaptor/tr1/unordered_set.hpp index e81fe590..928556fb 100644 --- a/include/msgpack/adaptor/tr1/unordered_set.hpp +++ b/include/msgpack/adaptor/tr1/unordered_set.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_TR1_UNORDERED_SET_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) @@ -141,4 +141,4 @@ inline void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_m #undef MSGPACK_STD_TR1 -#endif /* msgpack/type/set.hpp */ +#endif // MSGPACK_TYPE_TR1_UNORDERED_SET_HPP diff --git a/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp new file mode 100644 index 00000000..f5e9e648 --- /dev/null +++ b/include/msgpack/adaptor/tr1/unordered_set_fwd.hpp @@ -0,0 +1,71 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP +#define MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" + +#if defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#define MSGPACK_HAS_STD_UNOURDERED_SET +#include +#define MSGPACK_STD_TR1 std + +#else // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +#if __GNUC__ >= 4 + +#define MSGPACK_HAS_STD_TR1_UNOURDERED_SET + +#include +#define MSGPACK_STD_TR1 std::tr1 + +#endif // __GNUC__ >= 4 + +#endif // defined(_LIBCPP_VERSION) || (_MSC_VER >= 1700) + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_set& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_set& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_set& v); + +template +object const& operator>> (object const& o, MSGPACK_STD_TR1::unordered_multiset& v); + +template +packer& operator<< (packer& o, const MSGPACK_STD_TR1::unordered_multiset& v); + +template +void operator<< (object::with_zone& o, const MSGPACK_STD_TR1::unordered_multiset& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#undef MSGPACK_STD_TR1 + +#endif // MSGPACK_TYPE_TR1_UNORDERED_SET_FWD_HPP diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index 21f2f085..c004d388 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { @@ -80,4 +80,4 @@ inline void operator<< (object::with_zone& o, const std::vector& v) } // namespace msgpack -#endif /* msgpack/type/vector.hpp */ +#endif // MSGPACK_TYPE_VECTOR_HPP diff --git a/include/msgpack/adaptor/vector_char.hpp b/include/msgpack/adaptor/vector_char.hpp index a702f445..225c68ce 100644 --- a/include/msgpack/adaptor/vector_char.hpp +++ b/include/msgpack/adaptor/vector_char.hpp @@ -19,7 +19,7 @@ #define MSGPACK_TYPE_VECTOR_CHAR_HPP #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #include namespace msgpack { diff --git a/include/msgpack/adaptor/vector_char_fwd.hpp b/include/msgpack/adaptor/vector_char_fwd.hpp new file mode 100644 index 00000000..0d668efd --- /dev/null +++ b/include/msgpack/adaptor/vector_char_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2014 KONDO Takatoshi +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_VECTOR_CHAR_FWD_HPP +#define MSGPACK_TYPE_VECTOR_CHAR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +object const& operator>> (object const& o, std::vector& v); + +template +packer& operator<< (packer& o, const std::vector& v); + +void operator<< (object& o, const std::vector& v); + +void operator<< (object::with_zone& o, const std::vector& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_VECTOR_CHAR_FWD_HPP diff --git a/include/msgpack/adaptor/vector_fwd.hpp b/include/msgpack/adaptor/vector_fwd.hpp new file mode 100644 index 00000000..1e144018 --- /dev/null +++ b/include/msgpack/adaptor/vector_fwd.hpp @@ -0,0 +1,42 @@ +// +// MessagePack for C++ static resolution routine +// +// Copyright (C) 2008-2009 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#ifndef MSGPACK_TYPE_VECTOR_FWD_HPP +#define MSGPACK_TYPE_VECTOR_FWD_HPP + +#include "msgpack/versioning.hpp" +#include "msgpack/object_fwd.hpp" +#include + +namespace msgpack { + +MSGPACK_API_VERSION_NAMESPACE(v1) { + +template +object const& operator>> (object const& o, std::vector& v); + +template +packer& operator<< (packer& o, const std::vector& v); + +template +void operator<< (object::with_zone& o, const std::vector& v); + +} // MSGPACK_API_VERSION_NAMESPACE(v1) + +} // namespace msgpack + +#endif // MSGPACK_TYPE_VECTOR_FWD_HPP diff --git a/include/msgpack/detail/cpp03_zone.hpp b/include/msgpack/detail/cpp03_zone.hpp index b2acd3d8..b050a998 100644 --- a/include/msgpack/detail/cpp03_zone.hpp +++ b/include/msgpack/detail/cpp03_zone.hpp @@ -23,7 +23,7 @@ #include #include "msgpack/versioning.hpp" -#include "msgpack_forward.hpp" +#include "msgpack_fwd.hpp" #ifndef MSGPACK_ZONE_CHUNK_SIZE #define MSGPACK_ZONE_CHUNK_SIZE 8192 diff --git a/include/msgpack/object.hpp b/include/msgpack/object.hpp index 7e22426c..4be3fca4 100644 --- a/include/msgpack/object.hpp +++ b/include/msgpack/object.hpp @@ -19,9 +19,36 @@ #define MSGPACK_OBJECT_HPP #include "msgpack/versioning.hpp" -#include "msgpack/object_forward.hpp" +#include "msgpack/object_fwd.hpp" #include "msgpack/pack.hpp" #include "msgpack/zone.hpp" +#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/bool_fwd.hpp" +#include "msgpack/adaptor/char_ptr_fwd.hpp" +#include "msgpack/adaptor/deque_fwd.hpp" +#include "msgpack/adaptor/fixint_fwd.hpp" +#include "msgpack/adaptor/float_fwd.hpp" +#include "msgpack/adaptor/int_fwd.hpp" +#include "msgpack/adaptor/list_fwd.hpp" +#include "msgpack/adaptor/map_fwd.hpp" +#include "msgpack/adaptor/msgpack_tuple_fwd.hpp" +#include "msgpack/adaptor/nil_fwd.hpp" +#include "msgpack/adaptor/pair_fwd.hpp" +#include "msgpack/adaptor/raw_fwd.hpp" +#include "msgpack/adaptor/set_fwd.hpp" +#include "msgpack/adaptor/string_fwd.hpp" +#include "msgpack/adaptor/vector_fwd.hpp" +#include "msgpack/adaptor/vector_char_fwd.hpp" +#include "msgpack/adaptor/tr1/unordered_map_fwd.hpp" +#include "msgpack/adaptor/tr1/unordered_set_fwd.hpp" + +#if !defined(MSGPACK_USE_CPP03) +#include "adaptor/cpp11/array_fwd.hpp" +#include "adaptor/cpp11/array_char_fwd.hpp" +#include "adaptor/cpp11/forward_list_fwd.hpp" +#include "adaptor/cpp11/tuple_fwd.hpp" +#endif // !defined(MSGPACK_USE_CPP03) + #include #include #include @@ -50,6 +77,18 @@ private: object const& obj; }; +inline object const& operator>> (object const& o, object& v) +{ + v = o; + return o; +} + +template +inline object const& operator>> (object const& o, T& v) +{ + v.msgpack_unpack(o.convert()); + return o; +} // obsolete template @@ -64,38 +103,15 @@ public: template void msgpack_pack(Packer& o) const { - o << static_cast(*this); + msgpack::operator<<(o, static_cast(*this)); } void msgpack_unpack(object const& o) { - o >> static_cast(*this); + msgpack::operator>>(o, static_cast(*this)); } }; - -template -template -inline packer& packer::pack(const T& v) -{ - *this << v; - return *this; -} - -inline object const& operator>> (object const& o, object& v) -{ - v = o; - return o; -} - -// convert operator -template -inline object const& operator>> (object const& o, T& v) -{ - v.msgpack_unpack(o.convert()); - return o; -} - namespace detail { template struct packer_serializer { @@ -120,6 +136,13 @@ inline void operator<< (object::with_zone& o, const T& v) v.msgpack_object(static_cast(&o), o.zone); } +template +template +inline packer& packer::pack(const T& v) +{ + msgpack::operator<<(*this, v); + return *this; +} inline bool operator==(const object& x, const object& y) { @@ -228,7 +251,7 @@ inline object::implicit_type object::convert() const template inline void object::convert(T& v) const { - *this >> v; + msgpack::operator>>(*this, v); } template @@ -254,7 +277,7 @@ inline object::object() template inline object::object(const T& v) { - *this << v; + msgpack::operator<<(*this, v); } template @@ -268,7 +291,7 @@ template object::object(const T& v, zone& z) { with_zone oz(z); - oz << v; + msgpack::operator<<(oz, v); type = oz.type; via = oz.via; } @@ -277,7 +300,7 @@ template object::object(const T& v, zone* z) { with_zone oz(*z); - oz << v; + msgpack::operator<<(oz, v); type = oz.type; via = oz.via; } @@ -327,7 +350,7 @@ inline void pack_copy(packer& o, T v) template -packer& operator<< (packer& o, const object& v) +inline packer& operator<< (packer& o, const object& v) { switch(v.type) { case type::NIL: @@ -374,7 +397,7 @@ packer& operator<< (packer& o, const object& v) for(object* p(v.via.array.ptr), * const pend(v.via.array.ptr + v.via.array.size); p < pend; ++p) { - o << *p; + msgpack::operator<<(o, *p); } return o; @@ -383,8 +406,8 @@ packer& operator<< (packer& o, const object& v) for(object_kv* p(v.via.map.ptr), * const pend(v.via.map.ptr + v.via.map.size); p < pend; ++p) { - o << p->key; - o << p->val; + msgpack::operator<<(o, p->key); + msgpack::operator<<(o, p->val); } return o; diff --git a/include/msgpack/object_forward.hpp b/include/msgpack/object_fwd.hpp similarity index 83% rename from include/msgpack/object_forward.hpp rename to include/msgpack/object_fwd.hpp index cad24f45..e7a04c78 100644 --- a/include/msgpack/object_forward.hpp +++ b/include/msgpack/object_fwd.hpp @@ -16,8 +16,8 @@ // limitations under the License. // -#ifndef MSGPACK_OBJECT_FORWARD_HPP -#define MSGPACK_OBJECT_FORWARD_HPP +#ifndef MSGPACK_OBJECT_FWD_HPP +#define MSGPACK_OBJECT_FWD_HPP #include "msgpack/versioning.hpp" #include "msgpack/zone.hpp" @@ -137,8 +137,29 @@ struct object_kv { object val; }; +object const& operator>> (object const& o, object& v); + +template +object const& operator>> (object const& o, T& v); + +template +void operator<< (object::with_zone& o, const T& v); + + +template +class packer; + +template +packer& operator<< (packer& o, const object& v); + +template +packer& operator<< (packer& o, const T& v); + +template +void operator<< (object::with_zone& o, const T& v); + } // MSGPACK_API_VERSION_NAMESPACE(v1) } // namespace msgpack -#endif // MSGPACK_OBJECT_FORWARD_HPP +#endif // MSGPACK_OBJECT_FWD_HPP diff --git a/include/msgpack_forward.hpp b/include/msgpack_fwd.hpp similarity index 86% rename from include/msgpack_forward.hpp rename to include/msgpack_fwd.hpp index 90963fe6..91921dbb 100644 --- a/include/msgpack_forward.hpp +++ b/include/msgpack_fwd.hpp @@ -15,12 +15,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef MSGPACK_FORWARD_HPP -#define MSGPACK_FORWARD_HPP +#ifndef MSGPACK_FWD_HPP +#define MSGPACK_FWD_HPP #include "msgpack/versioning.hpp" #include "msgpack/zone.hpp" -#include "msgpack/object_forward.hpp" +#include "msgpack/object_fwd.hpp" #include "msgpack/pack.hpp" -#endif // MSGPACK_FORWARD_HPP +#endif // MSGPACK_FWD_HPP diff --git a/preprocess b/preprocess index 5efab359..e25eff3f 100755 --- a/preprocess +++ b/preprocess @@ -13,5 +13,6 @@ preprocess() { } preprocess erb/cpp03_msgpack_tuple.hpp include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp +preprocess erb/cpp03_msgpack_tuple_fwd.hpp include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp preprocess erb/cpp03_define.hpp include/msgpack/adaptor/detail/cpp03_define.hpp preprocess erb/cpp03_zone.hpp include/msgpack/detail/cpp03_zone.hpp diff --git a/src/Makefile.am b/src/Makefile.am index df0a872c..2c1ba1d7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -53,39 +53,64 @@ nobase_include_HEADERS = \ if ENABLE_CXX nobase_include_HEADERS += \ ../include/msgpack.hpp \ - ../include/msgpack_forward.hpp \ + ../include/msgpack_fwd.hpp \ ../include/msgpack/adaptor/bool.hpp \ + ../include/msgpack/adaptor/bool_fwd.hpp \ ../include/msgpack/adaptor/char_ptr.hpp \ + ../include/msgpack/adaptor/char_ptr_fwd.hpp \ ../include/msgpack/adaptor/cpp11/array.hpp \ + ../include/msgpack/adaptor/cpp11/array_fwd.hpp \ ../include/msgpack/adaptor/cpp11/array_char.hpp \ + ../include/msgpack/adaptor/cpp11/array_char_fwd.hpp \ ../include/msgpack/adaptor/cpp11/forward_list.hpp \ + ../include/msgpack/adaptor/cpp11/forward_list_fwd.hpp \ ../include/msgpack/adaptor/cpp11/tuple.hpp \ + ../include/msgpack/adaptor/cpp11/tuple_fwd.hpp \ ../include/msgpack/adaptor/define.hpp \ ../include/msgpack/adaptor/deque.hpp \ + ../include/msgpack/adaptor/deque_fwd.hpp \ ../include/msgpack/adaptor/detail/cpp03_define.hpp \ ../include/msgpack/adaptor/detail/cpp03_msgpack_tuple.hpp \ + ../include/msgpack/adaptor/detail/cpp03_msgpack_tuple_fwd.hpp \ ../include/msgpack/adaptor/detail/cpp11_define.hpp \ ../include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp \ + ../include/msgpack/adaptor/detail/cpp11_msgpack_tuple_fwd.hpp \ ../include/msgpack/adaptor/fixint.hpp \ + ../include/msgpack/adaptor/fixint_fwd.hpp \ ../include/msgpack/adaptor/float.hpp \ + ../include/msgpack/adaptor/float_fwd.hpp \ ../include/msgpack/adaptor/int.hpp \ + ../include/msgpack/adaptor/int_fwd.hpp \ ../include/msgpack/adaptor/list.hpp \ + ../include/msgpack/adaptor/list_fwd.hpp \ ../include/msgpack/adaptor/map.hpp \ + ../include/msgpack/adaptor/map_fwd.hpp \ ../include/msgpack/adaptor/msgpack_tuple.hpp \ + ../include/msgpack/adaptor/msgpack_tuple_fwd.hpp \ ../include/msgpack/adaptor/nil.hpp \ + ../include/msgpack/adaptor/nil_fwd.hpp \ ../include/msgpack/adaptor/pair.hpp \ + ../include/msgpack/adaptor/pair_fwd.hpp \ ../include/msgpack/adaptor/raw.hpp \ + ../include/msgpack/adaptor/raw_fwd.hpp \ ../include/msgpack/adaptor/set.hpp \ + ../include/msgpack/adaptor/set_fwd.hpp \ ../include/msgpack/adaptor/string.hpp \ + ../include/msgpack/adaptor/string_fwd.hpp \ ../include/msgpack/adaptor/tr1/unordered_map.hpp \ + ../include/msgpack/adaptor/tr1/unordered_map_fwd.hpp \ ../include/msgpack/adaptor/tr1/unordered_set.hpp \ + ../include/msgpack/adaptor/tr1/unordered_set_fwd.hpp \ ../include/msgpack/adaptor/vector.hpp \ + ../include/msgpack/adaptor/vector_fwd.hpp \ + ../include/msgpack/adaptor/vector_char.hpp \ + ../include/msgpack/adaptor/vector_char_fwd.hpp \ ../include/msgpack/cpp_config.hpp \ ../include/msgpack/detail/cpp03_zone.hpp \ ../include/msgpack/detail/cpp11_zone.hpp \ ../include/msgpack/fbuffer.hpp \ ../include/msgpack/object.hpp \ - ../include/msgpack/object_forward.hpp \ + ../include/msgpack/object_fwd.hpp \ ../include/msgpack/pack.hpp \ ../include/msgpack/sbuffer.hpp \ ../include/msgpack/type.hpp \