From 000349ba233a12d728fcd680e1ed42176084e1c8 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sun, 21 May 2017 05:01:43 -0700 Subject: [PATCH] Fix strict aliasing warnings in buffers_view --- CHANGELOG.md | 1 + include/beast/core/impl/buffer_cat.ipp | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f830aab4..824288dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ Version 43 * Require Boost 1.64.0 +* Fix strict aliasing warnings in buffers_view -------------------------------------------------------------------------------- diff --git a/include/beast/core/impl/buffer_cat.ipp b/include/beast/core/impl/buffer_cat.ipp index 38c8d1c6..b3f86771 100644 --- a/include/beast/core/impl/buffer_cat.ipp +++ b/include/beast/core/impl/buffer_cat.ipp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -24,8 +25,8 @@ class buffers_view::const_iterator { std::size_t n_; std::tuple const* bn_; - char buf_[detail::max_sizeof< - typename Bn::const_iterator...>()]; + std::array()> buf_; friend class buffers_view; @@ -42,7 +43,7 @@ class buffers_view::const_iterator { // type-pun return *reinterpret_cast< - iter_t*>(static_cast(buf_)); + iter_t*>(static_cast(buf_.data())); } template @@ -52,7 +53,7 @@ class buffers_view::const_iterator // type-pun return *reinterpret_cast< iter_t const*>(static_cast< - void const*>(buf_)); + void const*>(buf_.data())); } public: @@ -127,7 +128,7 @@ private: std::get(*bn_).end()) { n_ = I; - new(buf_) iter_t{ + new(&buf_[0]) iter_t{ std::get(*bn_).begin()}; return; } @@ -166,7 +167,7 @@ private: { if(n_ == I) { - new(buf_) iter_t{ + new(&buf_[0]) iter_t{ std::move(other.iter())}; return; } @@ -186,7 +187,7 @@ private: { if(n_ == I) { - new(buf_) iter_t{ + new(&buf_[0]) iter_t{ other.iter()}; return; } @@ -258,7 +259,7 @@ private: if(n_ == I) { --n_; - new(buf_) iter_t{ + new(&buf_[0]) iter_t{ std::get(*bn_).end()}; } decrement(C{}); @@ -291,7 +292,7 @@ private: --n_; using Iter = iter_t; iter().~Iter(); - new(buf_) iter_t{ + new(&buf_[0]) iter_t{ std::get(*bn_).end()}; } decrement(C{});