mirror of
https://github.com/boostorg/functional.git
synced 2025-08-01 21:44:28 +02:00
Merge remote-tracking branch 'origin/develop'
This commit is contained in:
@@ -317,7 +317,7 @@ separately allocated reference counter).
|
||||
};
|
||||
|
||||
template< typename Pointer,
|
||||
class Allocator = boost::none_t,
|
||||
class Allocator = void,
|
||||
factory_alloc_propagation AllocProp =
|
||||
factory_alloc_for_pointee_and_deleter >
|
||||
class factory;
|
||||
@@ -351,6 +351,19 @@ maximum arity. It defaults to 10.
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Changes]
|
||||
|
||||
[heading Boost 1.58.0]
|
||||
|
||||
In order to remove the dependency on Boost.Optional, the default parameter
|
||||
for allocators has been changed from `boost::none_t` to `void`.
|
||||
If you have code that has stopped working because it uses `boost::none_t`,
|
||||
a quick fix is to define `BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T`, which will
|
||||
restore support, but this will be removed in a future release.
|
||||
It should be be relatively easy to fix this properly.
|
||||
|
||||
[endsect]
|
||||
|
||||
[section Acknowledgements]
|
||||
|
||||
Eric Niebler requested a function to invoke a type's constructor (with the
|
||||
|
@@ -14,5 +14,9 @@ test-suite functional/factory
|
||||
[ run value_factory.cpp ]
|
||||
[ run factory.cpp ]
|
||||
[ run factory_with_allocator.cpp ]
|
||||
[ compile-fail factory_with_none_t.cpp ]
|
||||
[ run factory.cpp : : : <define>BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T : none_t_factory ]
|
||||
[ run factory_with_allocator.cpp : : : <define>BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T : none_t_factory_with_allocator ]
|
||||
[ run factory_with_none_t.cpp : : : <define>BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T : none_t_factory_with_none_t ]
|
||||
;
|
||||
|
||||
|
36
factory/test/factory_with_none_t.cpp
Normal file
36
factory/test/factory_with_none_t.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2007 Tobias Schwinger
|
||||
|
||||
Use modification and distribution are subject to 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).
|
||||
==============================================================================*/
|
||||
|
||||
#include <boost/functional/factory.hpp>
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
|
||||
#include <memory>
|
||||
|
||||
class sum
|
||||
{
|
||||
int val_sum;
|
||||
public:
|
||||
sum(int a, int b) : val_sum(a + b) { }
|
||||
|
||||
operator int() const { return this->val_sum; }
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
int one = 1, two = 2;
|
||||
{
|
||||
sum* instance( boost::factory< sum*, boost::none_t >()(one,two) );
|
||||
BOOST_TEST(*instance == 3);
|
||||
}
|
||||
{
|
||||
std::auto_ptr<sum> instance(
|
||||
boost::factory< std::auto_ptr<sum>, boost::none_t >()(one,two) );
|
||||
BOOST_TEST(*instance == 3);
|
||||
}
|
||||
return boost::report_errors();
|
||||
}
|
@@ -174,4 +174,9 @@
|
||||
* Ongoing work on improving `hash_combine`. This changes the combine function
|
||||
which was previously defined in the reference documentation.
|
||||
|
||||
[h2 Boost 1.58.0]
|
||||
|
||||
* Fixed strict aliasing violation
|
||||
([@https://github.com/boostorg/functional/pull/3 GitHub #3]).
|
||||
|
||||
[endsect]
|
||||
|
@@ -15,11 +15,14 @@
|
||||
|
||||
# include <new>
|
||||
# include <boost/pointee.hpp>
|
||||
# include <boost/none_t.hpp>
|
||||
# include <boost/get_pointer.hpp>
|
||||
# include <boost/non_type.hpp>
|
||||
# include <boost/type_traits/remove_cv.hpp>
|
||||
|
||||
# if defined(BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T)
|
||||
# include <boost/none_t.hpp>
|
||||
# endif
|
||||
|
||||
# ifndef BOOST_FUNCTIONAL_FACTORY_MAX_ARITY
|
||||
# define BOOST_FUNCTIONAL_FACTORY_MAX_ARITY 10
|
||||
# elif BOOST_FUNCTIONAL_FACTORY_MAX_ARITY < 3
|
||||
@@ -35,14 +38,20 @@ namespace boost
|
||||
factory_passes_alloc_to_smart_pointer
|
||||
};
|
||||
|
||||
#if defined(BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T)
|
||||
template< typename Pointer, class Allocator = boost::none_t,
|
||||
factory_alloc_propagation AP = factory_alloc_for_pointee_and_deleter >
|
||||
class factory;
|
||||
#else
|
||||
template< typename Pointer, class Allocator = void,
|
||||
factory_alloc_propagation AP = factory_alloc_for_pointee_and_deleter >
|
||||
class factory;
|
||||
#endif
|
||||
|
||||
//----- ---- --- -- - - - -
|
||||
|
||||
template< typename Pointer, factory_alloc_propagation AP >
|
||||
class factory<Pointer, boost::none_t, AP>
|
||||
class factory<Pointer, void, AP>
|
||||
{
|
||||
public:
|
||||
typedef typename boost::remove_cv<Pointer>::type result_type;
|
||||
@@ -56,6 +65,13 @@ namespace boost
|
||||
# include BOOST_PP_ITERATE()
|
||||
};
|
||||
|
||||
#if defined(BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T)
|
||||
template< typename Pointer, factory_alloc_propagation AP >
|
||||
class factory<Pointer, boost::none_t, AP>
|
||||
: public factory<Pointer, void, AP>
|
||||
{};
|
||||
#endif
|
||||
|
||||
template< class Pointer, class Allocator, factory_alloc_propagation AP >
|
||||
class factory
|
||||
: private Allocator::template rebind< typename boost::pointee<
|
||||
|
@@ -68,7 +68,7 @@ namespace boost
|
||||
std::size_t seed = 0;
|
||||
|
||||
if (length >= sizeof(std::size_t)) {
|
||||
seed = *(std::size_t*) ptr;
|
||||
std::memcpy(&seed, ptr, sizeof(std::size_t));
|
||||
length -= sizeof(std::size_t);
|
||||
ptr += sizeof(std::size_t);
|
||||
|
||||
|
@@ -15,7 +15,6 @@
|
||||
|
||||
# include <new>
|
||||
# include <boost/pointee.hpp>
|
||||
# include <boost/none_t.hpp>
|
||||
# include <boost/get_pointer.hpp>
|
||||
# include <boost/non_type.hpp>
|
||||
# include <boost/type_traits/remove_cv.hpp>
|
||||
|
Reference in New Issue
Block a user