Assertion and constexpr improvements for str_buffer

This commit is contained in:
Gudmundur Adalsteinsson 2019-09-11 20:21:02 +00:00
parent 13cc1e0fe9
commit ab588fb7c9
2 changed files with 5 additions and 4 deletions

View File

@ -244,7 +244,7 @@ TEST_CASE("const_buffer creation with str_buffer", "[buffer]")
CHECK(b.data() == static_cast<const wchar_t*>(wd)); CHECK(b.data() == static_cast<const wchar_t*>(wd));
zmq::const_buffer b2_null = zmq::buffer("hello"); zmq::const_buffer b2_null = zmq::buffer("hello");
zmq::const_buffer b2 = zmq::str_buffer("hello"); constexpr zmq::const_buffer b2 = zmq::str_buffer("hello");
CHECK(b2_null.size() == 6); CHECK(b2_null.size() == 6);
CHECK(b2.size() == 5); CHECK(b2.size() == 5);
CHECK(std::string(static_cast<const char*>(b2.data()), b2.size()) == "hello"); CHECK(std::string(static_cast<const char*>(b2.data()), b2.size()) == "hello");

View File

@ -1114,12 +1114,13 @@ const_buffer buffer(std::basic_string_view<T, Traits> data, size_t n_bytes) noex
// where the buffer size excludes the terminating character. // where the buffer size excludes the terminating character.
// Equivalent to zmq::buffer(std::string_view("...")). // Equivalent to zmq::buffer(std::string_view("...")).
template<class Char, size_t N> template<class Char, size_t N>
const_buffer str_buffer(const Char (&data)[N]) noexcept constexpr const_buffer str_buffer(const Char (&data)[N]) noexcept
{ {
static_assert(detail::is_pod_like<Char>::value, "Char must be POD"); static_assert(detail::is_pod_like<Char>::value, "Char must be POD");
static_assert(N > 0, "N > 0"); #ifdef ZMQ_CPP14
assert(data[N - 1] == Char{0}); assert(data[N - 1] == Char{0});
return const_buffer(N == 1 ? nullptr : static_cast<const Char*>(data), #endif
return const_buffer(static_cast<const Char*>(data),
(N - 1) * sizeof(Char)); (N - 1) * sizeof(Char));
} }