From 0ee8e59d0ac281402395185c8c40d3dc5fdb93d6 Mon Sep 17 00:00:00 2001 From: Piotr Podusowski Date: Fri, 16 Mar 2018 11:47:23 +0100 Subject: [PATCH] use char type directly to avoid invalid aliasing --- include/boost/function/function_template.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/boost/function/function_template.hpp b/include/boost/function/function_template.hpp index 0b05940..c6bbd2d 100644 --- a/include/boost/function/function_template.hpp +++ b/include/boost/function/function_template.hpp @@ -992,7 +992,9 @@ namespace boost { if (!f.empty()) { this->vtable = f.vtable; if (this->has_trivial_copy_and_destroy()) - this->functor = f.functor; + // Don't operate on storage directly since union type doesn't relax + // strict aliasing rules, despite of having member char type. + std::memcpy(this->functor.data, f.functor.data, sizeof(this->functor.data)); else get_vtable()->base.manager(f.functor, this->functor, boost::detail::function::move_functor_tag);