Compare commits

...

5 Commits

4 changed files with 57 additions and 0 deletions

View File

@ -3,6 +3,8 @@
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
if(NOT DEFINED IDF_TARGET)
cmake_minimum_required(VERSION 3.5...3.16)
project(boost_function VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
@ -32,3 +34,27 @@ if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
endif()
else()
FILE(GLOB_RECURSE headers include/*.h include/*.hpp)
idf_component_register(
SRCS
${headers}
INCLUDE_DIRS
include
REQUIRES
boost_assert
boost_bind
boost_config
boost_core
boost_integer
boost_preprocessor
boost_throw_exception
boost_type_index
boost_type_traits
boost_typeof
)
endif()

View File

@ -906,6 +906,10 @@ namespace boost {
// This warning is technically correct, but we don't want to pay the price for initializing
// just to silence a warning: https://github.com/boostorg/function/issues/27
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
# if (BOOST_GCC >= 120000)
// GCC 12 emits a different warning: https://github.com/boostorg/function/issues/42
# pragma GCC diagnostic ignored "-Wuninitialized"
# endif
# endif
std::memcpy(this->functor.data, f.functor.data, sizeof(boost::detail::function::function_buffer));
# if defined(BOOST_GCC) && (BOOST_GCC >= 40700)
@ -1004,6 +1008,10 @@ namespace boost {
// This warning is technically correct, but we don't want to pay the price for initializing
// just to silence a warning: https://github.com/boostorg/function/issues/27
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
# if (BOOST_GCC >= 120000)
// GCC 12 emits a different warning: https://github.com/boostorg/function/issues/42
# pragma GCC diagnostic ignored "-Wuninitialized"
# endif
# endif
std::memcpy(this->functor.data, f.functor.data, sizeof(this->functor.data));
# if defined(BOOST_GCC) && (BOOST_GCC >= 40700)

View File

@ -82,3 +82,5 @@ run test_return_function.cpp return_function/<cxxstd>14 : : : <link>shared $(che
run test_return_function.cpp return_function/<cxxstd>14 : : : <link>static $(check14) : return_function_static_14 ;
run quick.cpp ;
compile issue_42.cpp ;

21
test/issue_42.cpp Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2022 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
//
// https://github.com/boostorg/function/issues/42
#include <boost/function.hpp>
struct F
{
int operator()( int x ) const { return -x; }
};
struct X
{
boost::function<int(int)> f_;
explicit X( boost::function<int(int)> f ): f_( f ) {}
};
F f2;
X x( f2 ); // -Wuninitialized under GCC 12