Compare commits

...

14 Commits

Author SHA1 Message Date
Takatoshi Kondo
c6e6dbc608 Added string view to file list. 2017-02-04 20:17:37 +09:00
Takatoshi Kondo
e271cf2aed Merge pull request #563 from redboltz/ver2.1.1
Updated the version to 2.1.1.
2017-02-04 20:14:37 +09:00
Takatoshi Kondo
53e4bb92fe Updated the version to 2.1.1. 2017-02-04 19:04:14 +09:00
Takatoshi Kondo
303c1000c2 Merge pull request #562 from redboltz/fix_561
Fixed #561
2017-02-04 12:45:51 +09:00
Takatoshi Kondo
088ce946b9 Fixed #561
Fixed unpacker's buffer expansion logic.
2017-02-03 17:11:51 +09:00
Takatoshi Kondo
dc86adbf8e Merge pull request #558 from redboltz/add_boost_string_view
Added boost string_view adaptor.
2017-01-20 09:33:23 +09:00
Takatoshi Kondo
ad0cae30ad Merge pull request #559 from raeraex2/fix_compilation_warning
Fix compilation warnings about possible loss of data
2017-01-19 09:43:32 +09:00
raeraex2
bf3e2abc9e Update appveyor.yml
Updated zlib to 1.2.11
2017-01-17 23:22:18 +01:00
raeraex2
b7543e1386 Fix compilation warnings about possible loss of data 2017-01-17 22:16:05 +01:00
Takatoshi Kondo
1f515b3ae7 Added boost string_view adaptor. 2017-01-15 19:09:31 +09:00
Takatoshi Kondo
a933fa5892 Merge pull request #557 from obache/neatsrc/fix-char-subscripts-warnings
Make sure to pass `unsigned char` to `isprint()`
2017-01-13 14:15:15 +09:00
Takatoshi Kondo
a07622c276 Merge pull request #556 from obache/neatsrc/strip-cr
Strip unwanted CR before EOL
2017-01-12 20:47:35 +09:00
OBATA Akio
c955727d8c Make sure to pass unsigned char to isprint()
This change make safe for `char = signed char`.

As the spec, argment of `isprintf()` must be representabe as an
`unsigned char` (or equal to EOF, not expected here).
Additionally, some implementation define it as a macro using array,
then it cause warning "array subscript has type `char` [-Wchar-subscripts]"
with `char` argments.
2017-01-12 15:01:04 +09:00
OBATA Akio
094b70213a Strip unwanted CR before EOL 2017-01-12 14:35:51 +09:00
13 changed files with 185 additions and 25 deletions

View File

@@ -1,3 +1,10 @@
# 2017-02-04 version 2.1.1
* Fix unpacker's buffer management bug (#561)
* Add boost string_view adaptor (#558)
* Remove some warnings (#557, #559)
* Improve coding style (#556)
# 2017-01-10 version 2.1.0 # 2017-01-10 version 2.1.0
## << breaking changes >> ## << breaking changes >>

View File

@@ -165,6 +165,7 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/adaptor/boost/msgpack_variant_decl.hpp include/msgpack/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/adaptor/boost/optional.hpp include/msgpack/adaptor/boost/optional.hpp
include/msgpack/adaptor/boost/string_ref.hpp include/msgpack/adaptor/boost/string_ref.hpp
include/msgpack/adaptor/boost/string_view.hpp
include/msgpack/adaptor/carray.hpp include/msgpack/adaptor/carray.hpp
include/msgpack/adaptor/char_ptr.hpp include/msgpack/adaptor/char_ptr.hpp
include/msgpack/adaptor/check_container_size.hpp include/msgpack/adaptor/check_container_size.hpp
@@ -512,6 +513,7 @@ IF (MSGPACK_ENABLE_CXX)
include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp include/msgpack/v1/adaptor/boost/msgpack_variant_decl.hpp
include/msgpack/v1/adaptor/boost/optional.hpp include/msgpack/v1/adaptor/boost/optional.hpp
include/msgpack/v1/adaptor/boost/string_ref.hpp include/msgpack/v1/adaptor/boost/string_ref.hpp
include/msgpack/v1/adaptor/boost/string_view.hpp
include/msgpack/v1/adaptor/carray.hpp include/msgpack/v1/adaptor/carray.hpp
include/msgpack/v1/adaptor/char_ptr.hpp include/msgpack/v1/adaptor/char_ptr.hpp
include/msgpack/v1/adaptor/check_container_size.hpp include/msgpack/v1/adaptor/check_container_size.hpp

View File

@@ -1,7 +1,7 @@
`msgpack` for C/C++ `msgpack` for C/C++
=================== ===================
Version 2.1.0 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master) Version 2.1.1 [![Build Status](https://travis-ci.org/msgpack/msgpack-c.svg?branch=master)](https://travis-ci.org/msgpack/msgpack-c) [![Build status](https://ci.appveyor.com/api/projects/status/8kstcgt79qj123mw/branch/master?svg=true)](https://ci.appveyor.com/project/redboltz/msgpack-c/branch/master)
It's like JSON but small and fast. It's like JSON but small and fast.

View File

@@ -33,10 +33,10 @@ build_script:
- cmake --build . --config Release - cmake --build . --config Release
- cd .. - cd ..
- cd .. - cd ..
- appveyor DownloadFile http://zlib.net/zlib-1.2.10.tar.gz -FileName zlib-1.2.10.tar.gz - appveyor DownloadFile http://zlib.net/zlib-1.2.11.tar.gz -FileName zlib-1.2.11.tar.gz
- 7z x zlib-1.2.10.tar.gz > NUL - 7z x zlib-1.2.11.tar.gz > NUL
- 7z x zlib-1.2.10.tar > NUL - 7z x zlib-1.2.11.tar > NUL
- cd zlib-1.2.10 - cd zlib-1.2.11
- md build - md build
- cd build - cd build
- cmake -G %msvc% .. - cmake -G %msvc% ..
@@ -46,9 +46,9 @@ build_script:
- cd .. - cd ..
- md build - md build
- cd build - cd build
- cmake -G %msvc% %cpp11% %boost% %x3_parse% -DMSGPACK_BOOST_DIR=C:\Libraries\\boost_1_60_0 -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.10\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.10 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' .. - cmake -G %msvc% %cpp11% %boost% %x3_parse% -DMSGPACK_BOOST_DIR=C:\Libraries\\boost_1_60_0 -DGTEST_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest.lib -DGTEST_MAIN_LIBRARY=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release\gtest_main.lib -DGTEST_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\include -DZLIB_LIBRARY=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release\zlib.lib -DZLIB_INCLUDE_DIR=%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11 -DCMAKE_CXX_FLAGS='"/D_VARIADIC_MAX=10 /EHsc"' ..
- cmake --build . --config Release - cmake --build . --config Release
test_script: test_script:
- set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.10\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\googletest-release-1.7.0\build\Release;%APPVEYOR_BUILD_FOLDER%\zlib-1.2.11\build\Release;%APPVEYOR_BUILD_FOLDER%\build\release
- ctest -V - ctest -V

View File

@@ -0,0 +1,15 @@
//
// MessagePack for C++ static resolution routine
//
// Copyright (C) 2017 KONDO Takatoshi
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef MSGPACK_TYPE_BOOST_STRING_VIEW_HPP
#define MSGPACK_TYPE_BOOST_STRING_VIEW_HPP
#include "msgpack/v1/adaptor/boost/string_view.hpp"
#endif // MSGPACK_TYPE_BOOST_STRING_VIEW_HPP

View File

@@ -50,5 +50,6 @@
#include "adaptor/boost/msgpack_variant.hpp" #include "adaptor/boost/msgpack_variant.hpp"
#include "adaptor/boost/optional.hpp" #include "adaptor/boost/optional.hpp"
#include "adaptor/boost/string_ref.hpp" #include "adaptor/boost/string_ref.hpp"
#include "adaptor/boost/string_view.hpp"
#endif // defined(MSGPACK_USE_BOOST) #endif // defined(MSGPACK_USE_BOOST)

View File

@@ -0,0 +1,87 @@
//
// MessagePack for C++ static resolution routine
//
// Copyright (C) 2017 KONDO Takatoshi
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
#ifndef MSGPACK_V1_TYPE_BOOST_STRING_VIEW_HPP
#define MSGPACK_V1_TYPE_BOOST_STRING_VIEW_HPP
#include <boost/version.hpp>
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 61
#include "msgpack/versioning.hpp"
#include "msgpack/adaptor/adaptor_base.hpp"
#include "msgpack/adaptor/check_container_size.hpp"
#include <boost/utility/string_view.hpp>
namespace msgpack {
/// @cond
MSGPACK_API_VERSION_NAMESPACE(v1) {
/// @endcond
namespace adaptor {
template <>
struct convert<boost::string_view> {
msgpack::object const& operator()(msgpack::object const& o, boost::string_view& v) const {
switch (o.type) {
case msgpack::type::BIN:
v = boost::string_view(o.via.bin.ptr, o.via.bin.size);
break;
case msgpack::type::STR:
v = boost::string_view(o.via.str.ptr, o.via.str.size);
break;
default:
throw msgpack::type_error();
break;
}
return o;
}
};
template <>
struct pack<boost::string_view> {
template <typename Stream>
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const boost::string_view& v) const {
uint32_t size = checked_get_container_size(v.size());
o.pack_str(size);
o.pack_str_body(v.data(), size);
return o;
}
};
template <>
struct object<boost::string_view> {
void operator()(msgpack::object& o, const boost::string_view& v) const {
uint32_t size = checked_get_container_size(v.size());
o.type = msgpack::type::STR;
o.via.str.ptr = v.data();
o.via.str.size = size;
}
};
template <>
struct object_with_zone<boost::string_view> {
void operator()(msgpack::object::with_zone& o, const boost::string_view& v) const {
static_cast<msgpack::object&>(o) << v;
}
};
} // namespace adaptor
/// @cond
} // MSGPACK_API_VERSION_NAMESPACE(v1)
/// @endcond
} // namespace msgpack
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 53
#endif // MSGPACK_V1_TYPE_BOOST_STRING_VIEW_HPP

View File

@@ -101,7 +101,7 @@ struct pack<char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.pack_str(adjusted_size); o.pack_str(adjusted_size);
o.pack_str_body(p, adjusted_size); o.pack_str_body(p, adjusted_size);
return o; return o;
@@ -115,7 +115,7 @@ struct pack<const char[N]> {
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p = v; char const* p = v;
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.pack_str(adjusted_size); o.pack_str(adjusted_size);
o.pack_str_body(p, adjusted_size); o.pack_str_body(p, adjusted_size);
return o; return o;
@@ -167,7 +167,7 @@ struct object_with_zone<char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; o.type = msgpack::type::STR;
char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size)); char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size));
o.via.str.ptr = ptr; o.via.str.ptr = ptr;
@@ -182,7 +182,7 @@ struct object_with_zone<const char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; o.type = msgpack::type::STR;
char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size)); char* ptr = static_cast<char*>(o.zone.allocate_align(adjusted_size));
o.via.str.ptr = ptr; o.via.str.ptr = ptr;
@@ -221,7 +221,7 @@ struct object<char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; o.type = msgpack::type::STR;
o.via.str.ptr = p; o.via.str.ptr = p;
o.via.str.size = adjusted_size; o.via.str.size = adjusted_size;
@@ -234,7 +234,7 @@ struct object<const char[N]> {
char const* p = v; char const* p = v;
uint32_t size = checked_get_container_size(N); uint32_t size = checked_get_container_size(N);
char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size)); char const* p2 = static_cast<char const*>(std::memchr(p, '\0', size));
uint32_t adjusted_size = p2 ? p2 - p : size; uint32_t adjusted_size = p2 ? static_cast<uint32_t>(p2 - p) : size;
o.type = msgpack::type::STR; o.type = msgpack::type::STR;
o.via.str.ptr = p; o.via.str.ptr = p;
o.via.str.size = adjusted_size; o.via.str.size = adjusted_size;

View File

@@ -459,7 +459,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
load<uint8_t>(tmp, n); load<uint8_t>(tmp, n);
m_trail = tmp + 1; m_trail = tmp + 1;
if(m_trail == 0) { if(m_trail == 0) {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} }
@@ -501,7 +501,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
load<uint16_t>(tmp, n); load<uint16_t>(tmp, n);
m_trail = tmp + 1; m_trail = tmp + 1;
if(m_trail == 0) { if(m_trail == 0) {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} }
@@ -545,7 +545,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
m_trail = tmp; m_trail = tmp;
++m_trail; ++m_trail;
if(m_trail == 0) { if(m_trail == 0) {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} }
@@ -555,7 +555,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
} }
} break; } break;
case MSGPACK_ACS_STR_VALUE: { case MSGPACK_ACS_STR_VALUE: {
bool visret = holder().visitor().visit_str(n, m_trail); bool visret = holder().visitor().visit_str(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
@@ -565,7 +565,7 @@ inline parse_return context<VisitorHolder>::execute(const char* data, std::size_
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
case MSGPACK_ACS_EXT_VALUE: { case MSGPACK_ACS_EXT_VALUE: {
bool visret = holder().visitor().visit_ext(n, m_trail); bool visret = holder().visitor().visit_ext(n, static_cast<uint32_t>(m_trail));
parse_return upr = after_visit_proc(visret, off); parse_return upr = after_visit_proc(visret, off);
if (upr != PARSE_CONTINUE) return upr; if (upr != PARSE_CONTINUE) return upr;
} break; } break;
@@ -839,7 +839,7 @@ template <typename VisitorHolder, typename ReferencedBufferHook>
inline void parser<VisitorHolder, ReferencedBufferHook>::expand_buffer(std::size_t size) inline void parser<VisitorHolder, ReferencedBufferHook>::expand_buffer(std::size_t size)
{ {
if(m_used == m_off && detail::get_count(m_buffer) == 1 if(m_used == m_off && detail::get_count(m_buffer) == 1
&& static_cast<VisitorHolder&>(*this).visitor().referenced()) { && !static_cast<VisitorHolder&>(*this).visitor().referenced()) {
// rewind buffer // rewind buffer
m_free += m_used - COUNTER_SIZE; m_free += m_used - COUNTER_SIZE;
m_used = COUNTER_SIZE; m_used = COUNTER_SIZE;

View File

@@ -1,3 +1,3 @@
#define MSGPACK_VERSION_MAJOR 2 #define MSGPACK_VERSION_MAJOR 2
#define MSGPACK_VERSION_MINOR 1 #define MSGPACK_VERSION_MINOR 1
#define MSGPACK_VERSION_REVISION 0 #define MSGPACK_VERSION_REVISION 1

View File

@@ -18,9 +18,9 @@
#include <inttypes.h> #include <inttypes.h>
#else #else
#define PRIu64 "I64u" #define PRIu64 "I64u"
#define PRIi64 "I64i" #define PRIi64 "I64i"
#define PRIi8 "i" #define PRIi8 "i"
#endif #endif
#else #else
#include <inttypes.h> #include <inttypes.h>
#endif #endif
@@ -122,7 +122,7 @@ static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
for (i = 0; i < size; ++i) { for (i = 0; i < size; ++i) {
if (ptr[i] == '"') { if (ptr[i] == '"') {
fputs("\\\"", out); fputs("\\\"", out);
} else if (isprint(ptr[i])) { } else if (isprint((unsigned char)ptr[i])) {
fputc(ptr[i], out); fputc(ptr[i], out);
} else { } else {
fprintf(out, "\\x%02x", (unsigned char)ptr[i]); fprintf(out, "\\x%02x", (unsigned char)ptr[i]);
@@ -142,7 +142,7 @@ static int msgpack_object_bin_print_buffer(char *buffer, size_t buffer_size, con
ret = snprintf(aux_buffer, aux_buffer_size, "\\\""); ret = snprintf(aux_buffer, aux_buffer_size, "\\\"");
aux_buffer = aux_buffer + ret; aux_buffer = aux_buffer + ret;
aux_buffer_size = aux_buffer_size - ret; aux_buffer_size = aux_buffer_size - ret;
} else if (isprint(ptr[i])) { } else if (isprint((unsigned char)ptr[i])) {
if (aux_buffer_size > 0) { if (aux_buffer_size > 0) {
memcpy(aux_buffer, ptr + i, 1); memcpy(aux_buffer, ptr + i, 1);
aux_buffer = aux_buffer + 1; aux_buffer = aux_buffer + 1;

View File

@@ -45,6 +45,7 @@ IF (MSGPACK_BOOST)
boost_variant.cpp boost_variant.cpp
boost_optional.cpp boost_optional.cpp
boost_string_ref.cpp boost_string_ref.cpp
boost_string_view.cpp
) )
ENDIF () ENDIF ()

View File

@@ -0,0 +1,47 @@
#include <msgpack.hpp>
#include <sstream>
#include <iterator>
#include <gtest/gtest.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#if defined(MSGPACK_USE_BOOST)
#if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 61
TEST(MSGPACK_BOOST, pack_convert_string_view)
{
std::stringstream ss;
std::string s = "ABC";
boost::string_view val1(s);
msgpack::pack(ss, val1);
msgpack::object_handle oh;
msgpack::unpack(oh, ss.str().data(), ss.str().size());
boost::string_view val2 = oh.get().as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}
TEST(MSGPACK_BOOST, object_strinf_view)
{
std::string s = "ABC";
boost::string_view val1(s);
msgpack::object obj(val1);
boost::string_view val2 = obj.as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}
TEST(MSGPACK_BOOST, object_with_zone_string_view)
{
msgpack::zone z;
std::string s = "ABC";
boost::string_view val1(s);
msgpack::object obj(val1, z);
boost::string_view val2 = obj.as<boost::string_view>();
EXPECT_TRUE(val1 == val2);
}
#endif // (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 61
#endif // defined(MSGPACK_USE_BOOST)