From b750b17598bace289a51dfc9d6c2e701ebbca072 Mon Sep 17 00:00:00 2001 From: Dainis Jonitis Date: Tue, 21 Jul 2015 14:45:19 +0300 Subject: [PATCH 1/6] Fix endianness detection on OpenWrt --- include/msgpack/sysdep.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/msgpack/sysdep.h b/include/msgpack/sysdep.h index 80a9997a9..f569c390d 100644 --- a/include/msgpack/sysdep.h +++ b/include/msgpack/sysdep.h @@ -76,6 +76,11 @@ typedef unsigned int _msgpack_atomic_counter_t; #else #include /* __BYTE_ORDER */ + +# ifndef __BYTE_ORDER +# include +# endif + # if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && \ !(defined(__sun) && defined(__SVR4)) # include From 5cc712ceeb090534e35aea33c63eecf8a426e362 Mon Sep 17 00:00:00 2001 From: Dainis Jonitis Date: Mon, 27 Jul 2015 10:37:12 +0300 Subject: [PATCH 2/6] Fix warning about possible loss of value --- include/msgpack/adaptor/ext.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/msgpack/adaptor/ext.hpp b/include/msgpack/adaptor/ext.hpp index 0fe836b40..17c34cd40 100644 --- a/include/msgpack/adaptor/ext.hpp +++ b/include/msgpack/adaptor/ext.hpp @@ -58,7 +58,7 @@ class ext { return &m_data[1]; } uint32_t size() const { - return m_data.size() - 1; + return static_cast(m_data.size()) - 1; } bool operator== (const ext& x) const { return m_data == x.m_data; From 2164723c86c4b92d23e516f9cd7892cf750649b3 Mon Sep 17 00:00:00 2001 From: Dainis Jonitis Date: Mon, 27 Jul 2015 10:38:46 +0300 Subject: [PATCH 3/6] Allow vectors of non-default-constructible values in c++11 mode --- include/msgpack/adaptor/vector.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index 5c429a9da..69fa10260 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -32,6 +32,25 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { namespace adaptor { +#if !defined(MSGPACK_USE_CPP03) +template +struct as> { + std::vector operator()(const msgpack::object& o) const { + if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + std::vector v; + if (o.via.array.size > 0) { + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + do { + v.emplace_back(p->as()); + ++p; + } while (p < pend); + } + return v; + } +}; +#endif + template struct convert > { msgpack::object const& operator()(msgpack::object const& o, std::vector& v) const { From 98c285c679f69a816307202ca74426383473031e Mon Sep 17 00:00:00 2001 From: Dainis Jonitis Date: Mon, 27 Jul 2015 11:00:43 +0300 Subject: [PATCH 4/6] Fix compilation warnings about possible loss of data --- include/msgpack/adaptor/ext.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/msgpack/adaptor/ext.hpp b/include/msgpack/adaptor/ext.hpp index 0fe836b40..17c34cd40 100644 --- a/include/msgpack/adaptor/ext.hpp +++ b/include/msgpack/adaptor/ext.hpp @@ -58,7 +58,7 @@ class ext { return &m_data[1]; } uint32_t size() const { - return m_data.size() - 1; + return static_cast(m_data.size()) - 1; } bool operator== (const ext& x) const { return m_data == x.m_data; From 763c2613df2100d782df93675eaa421f68760c80 Mon Sep 17 00:00:00 2001 From: Dainis Jonitis Date: Mon, 27 Jul 2015 11:06:20 +0300 Subject: [PATCH 5/6] Support vectors of non-default-constructible values in c++11 mode --- include/msgpack/adaptor/vector.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/msgpack/adaptor/vector.hpp b/include/msgpack/adaptor/vector.hpp index 5c429a9da..69fa10260 100644 --- a/include/msgpack/adaptor/vector.hpp +++ b/include/msgpack/adaptor/vector.hpp @@ -32,6 +32,25 @@ MSGPACK_API_VERSION_NAMESPACE(v1) { namespace adaptor { +#if !defined(MSGPACK_USE_CPP03) +template +struct as> { + std::vector operator()(const msgpack::object& o) const { + if (o.type != msgpack::type::ARRAY) { throw msgpack::type_error(); } + std::vector v; + if (o.via.array.size > 0) { + msgpack::object* p = o.via.array.ptr; + msgpack::object* const pend = o.via.array.ptr + o.via.array.size; + do { + v.emplace_back(p->as()); + ++p; + } while (p < pend); + } + return v; + } +}; +#endif + template struct convert > { msgpack::object const& operator()(msgpack::object const& o, std::vector& v) const { From 8f8d1800bde658a3706b46edc66f449515a92655 Mon Sep 17 00:00:00 2001 From: Dainis Jonitis Date: Tue, 11 Aug 2015 09:46:17 +0300 Subject: [PATCH 6/6] Add Visual Studio 2015 support --- include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp | 4 ++-- include/msgpack/cpp_config.hpp | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp index 43187a8ea..2d3f45e5f 100644 --- a/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp +++ b/include/msgpack/adaptor/detail/cpp11_msgpack_tuple.hpp @@ -71,11 +71,11 @@ namespace type { template< std::size_t I> typename tuple_element::type& - get() { return std::get(*this); } + get() & { return std::get(*this); } template< std::size_t I> typename tuple_element::type const& - get() const { return std::get(*this); } + get() const& { return std::get(*this); } template< std::size_t I> typename tuple_element::type&& diff --git a/include/msgpack/cpp_config.hpp b/include/msgpack/cpp_config.hpp index 7bb3336af..333968737 100644 --- a/include/msgpack/cpp_config.hpp +++ b/include/msgpack/cpp_config.hpp @@ -21,10 +21,11 @@ #include "msgpack/versioning.hpp" #if !defined(MSGPACK_USE_CPP03) - // If MSVC would support C++11 completely, - // then 'defined(_MSC_VER)' would replace with - // '_MSC_VER < XXXX' -# if (__cplusplus < 201103L) || defined(_MSC_VER) +# if defined(_MSC_VER) +# if _MSC_VER < 1900 +# define MSGPACK_USE_CPP03 +# endif +# elif (__cplusplus < 201103L) # define MSGPACK_USE_CPP03 # endif #endif // MSGPACK_USE_CPP03