Coder Social home page Coder Social logo

poly_collection's Introduction

Boost PolyCollection library

Branch Travis AppVeyor Regression tests
develop Build Status Build Status Test Results
master Build Status Build Status Test Results

Boost.PolyCollection: fast containers of polymorphic objects.

Online docs
Seminal article at bannalia.blogspot.com

Typically, polymorphic objects cannot be stored directly in regular containers and need be accessed through an indirection pointer, which introduces performance problems related to CPU caching and branch prediction. Boost.PolyCollection implements a novel data structure that is able to contiguously store polymorphic objects without such indirection, thus providing a value-semantics user interface and better performance. Three polymorphic collections are provided:

dealing respectively with classic base/derived or OOP polymorphism, function wrapping in the spirit of std::function and so-called duck typing as implemented by Boost.TypeErasure.

Requirements

Boost.PolyCollection is a header-only library. C++11 support is required. The library has been verified to work with Visual Studio 2015, GCC 4.8 and Clang 3.3.

poly_collection's People

Contributors

giomasce avatar grafikrobot avatar joaquintides avatar pdimov avatar tinko92 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

poly_collection's Issues

Failed to run libs\poly_collection\test with MSVC

Environment:
VS 2017 + Windows Server 2016

Issue description:
We build and run test for boost we found one test libs\poly_collection\test failed. It can be reproduced on latest version. Could you please take a look?

Reproduce steps:

  1. git clone -c core.autocrlf=true --recursive ​https://github.com/boostorg/boost.git D:\Boost\src
  2. open a VS 2017 x64 command prompt and browse to D:\Boost\src
  3. .\bootstrap
  4. .\b2 headers variant=release --build-dir=..\out\x64rel address-model=64
  5. .\b2 variant=release --build-dir=..\out\x64rel address-model=64
  6. .\b2 -j4 variant=release --build-dir=..\out\x64rel libs\poly_collection\test

ErrorMessage:
testing.capture-output ..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.run
====== BEGIN OUTPUT ======

EXIT STATUS: 3
====== END OUTPUT ======

set status=0
if %status% NEQ 0 (
    echo Skipping test execution due to testing.execute=off
    exit 0
)
 "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.exe"   > "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.output" 2>&1 
set status=%ERRORLEVEL%
echo. >> "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.output"
echo EXIT STATUS: %status% >> "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.output"
if %status% EQU 0 (
    copy "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.output" "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.run"
)
set verbose=0
if %status% NEQ 0 (
    set verbose=1
)
if %verbose% EQU 1 (
    echo ====== BEGIN OUTPUT ======
    type "..\out\x64rel\boost\bin.v2\libs\poly_collection\test\test_construction.test\msvc-14.1\release\threading-multi\test_construction.output"
    echo ====== END OUTPUT ======
)
exit %status%

...failed testing.capture-output

log_x64_test_76.log

Needs 'develop' branch

It is customary for a new Boost library to have at minimum both a 'master' and a 'develop' branch. The library only has a 'master' branch. It needs to create a 'develop' branch also.

poly_collection creates undefined behavior with non-POCS allocators

This is detected by VS2019 RTM, and causes poly_collection tests to fail there.

The test fails when rooted_allocator is set to no-propagate mode; so POCCA/POCMA/POCS do not propagate allocators, and thus on swap the allocators must be equal or you break http://eel.is/c++draft/container.requirements.general#9 :

If allocator_­traits<allocator_­type>::propagate_­on_­container_­swap::value is true, then [...]. Otherwise, the allocators shall not be swapped, and the behavior is undefined unless a.get_­allocator() == b.get_­allocator().

In test_construction.cpp, on lines 40 and 41, a rooted_poly_collection is created which is associated with the root1 allocator, associated with a const reference cp.
On line 97, a rooted_poly_collection associated with root2 is created. (Note unequal allocators)
On line 98, p2 is copy assigned over by cp.
A few calls in, this ends up in type_info_map.hpp, which has:

  type_info_map& operator=(const type_info_map& x)
  {
    if(this!=&x){
      type_info_map c{x};
      swap(c);
    }
    return *this;
  }

This makes a new container c with the root1 allocator, and then tries to swap with *this, which uses root2's allocator. If it's not a POCS allocator, that's UB as described above.

I'm not sure how you want to fix the product code; this appears to be a regression in Boost 1.69 because 1.68 passed?

ubsan: stride_iterator.hpp:83:11: runtime error: downcast of address

ziv@ziv-dev:~/Dev/temp$ g++ --version
g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ziv@ziv-dev:~/Dev/temp$ cat main.cpp
#include <boost/poly_collection/base_collection.hpp>


struct Base
{
	virtual ~Base() = default;
};

struct D1 : Base {};


int main()
{
	boost::base_collection<Base> bases;
	bases.insert(D1());
	bases.insert(D1());
	bases.insert(D1());

	for (auto it = bases.begin<D1>(); it != bases.end<D1>(); ++it);
}
ziv@ziv-dev:~/Dev/temp$ g++ -I../boost_1_70_0 -pipe -std=c++17 -fsanitize=undefined -fno-sanitize-recover -g  main.cpp && ./a.out
../boost_1_70_0/boost/poly_collection/detail/stride_iterator.hpp:83:11: runtime error: downcast of address 0x55ae935fae88 which does not point to an object of type 'D1'
0x55ae935fae88: note: object has invalid vptr
 ae 55 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  31 00 00 00 00 00 00 00  00 00 00 00
              ^~~~~~~~~~~~~~~~~~~~~~~
              invalid vptr
    #0 0x55ae9284bce1 in boost::poly_collection::detail::stride_iterator<Base>::operator D1*<D1, (void*)0>() const ../boost_1_70_0/boost/poly_collection/detail/stride_iterator.hpp:83
    #1 0x55ae9284a274 in boost::poly_collection::detail::local_iterator_impl<boost::poly_collection::common_impl::poly_collection<boost::poly_collection::detail::base_model<Base>, std::allocator<Base> >, D1*>::local_iterator_impl<boost::poly_collection::detail::stride_iterator<Base> >(std::__detail::_Node_const_iterator<std::pair<std::type_info const* const, boost::poly_collection::detail::segment<boost::poly_collection::detail::base_model<Base>, boost::poly_collection::detail::allocator_adaptor<std::allocator<Base> > > >, false, false>, boost::poly_collection::detail::stride_iterator<Base>) ../boost_1_70_0/boost/poly_collection/detail/iterator_impl.hpp:150
    #2 0x55ae92848f85 in boost::poly_collection::detail::local_iterator_impl<boost::poly_collection::common_impl::poly_collection<boost::poly_collection::detail::base_model<Base>, std::allocator<Base> >, D1*> boost::poly_collection::common_impl::poly_collection<boost::poly_collection::detail::base_model<Base>, std::allocator<Base> >::end<D1, (void*)0>() ../boost_1_70_0/boost/poly_collection/detail/poly_collection.hpp:484
    #3 0x55ae92846a1f in main /home/ziv/Dev/temp/main.cpp:19
    #4 0x7f62b00e7b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
    #5 0x55ae928465e9 in _start (/home/ziv/Dev/temp/a.out+0x195e9)

ziv@ziv-dev:~/Dev/temp$ 

Pool segment backend

My understanding is currently segments are stored in std::vectors.

If I wanted to create a base_collection using a pool instead of a vector, would I just have to create a new segment_backend using a pool class for storage?

It seems using a pool backend would avoid the problem of vector memory reallocation causing object pointers and iterators to become invalid.

Motivation: I want to make object creation and deletion cheaper while retaining a polymorphic collection. Truly pie in the sky. =)

Default reserve size

I would like to suggest adding a user-configurable default reserve size which applies to all future allocations, including types which have not been registered yet.

Motivation: As is, having to explicitly reserve<EachSubType>(theSameValue) somewhat defeats the polymorphic goal of the library. In most of my use cases, I simply want to set a per-segment initial size and leave it at that.

I like having the option of performing per-segment reserves if I choose, so I think leaving reserve as-is is fine, and adding a setDefaultReserve would solve the issue.

poly_collection tests expect move-assigned-from state of containers to be empty, despite non-POCMA allocators

On line 124 of test_construction.cpp ( https://github.com/boostorg/poly_collection/blob/develop/test/test_construction.cpp#L124 ), there is a move of assignment of a rooted_poly_collection (which contains a std::unordered_map). Then there's an assertion that p2 is empty, on the basis of the moved-from state of that unordered_map. For a POCMA allocator, it makes sense that the only reasonable state in which the library can leave the moved-from container be the empty state, since there we must take the contents of the original container. But for a non-POCMA allocator, where we can't take the contents of the moved-from container, the natural state to leave the source container is containing a bunch of moved-from Ts, meaning it won't be empty.

It seems like maybe the whole block should be guarded like this?

if (Propagate || AlwaysEqual) {
	BOOST_TEST(d2 == d3);
	BOOST_TEST(p2.empty());
	do_((BOOST_TEST(!p2.template is_registered<Types>()), 0)...);
}

any_collection fails to compile when boost::any is included

Minimal code repro

#include <boost/any.hpp>
#include <boost/poly_collection/any_collection.hpp>
boost::poly_collection::any_collection<boost::type_erasure::destructible<>> collection;

When I want to compile these lines, the compiler says:

In file included from /opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/poly_collection/any_collection.hpp:17,
                 from prog.cc:2:
/opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/poly_collection/detail/any_model.hpp: In static member function 'static boost::poly_collection::detail::any_model<Concept>::value_type boost::poly_collection::detail::any_model<Concept>::make_value_type(boost::type_erasure::any<Concept2, Tag2>&)':
/opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/poly_collection/detail/any_model.hpp:187:20: error: reference to 'any' is ambiguous
  187 |     using ref_type=any<Concept2,T>;
      |                    ^~~
In file included from prog.cc:1:
/opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/any.hpp:35:11: note: candidates are: 'class boost::any'
   35 |     class any
      |           ^~~
In file included from /opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/type_erasure/any.hpp:38,
                 from /opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/type_erasure/any_cast.hpp:24,
                 from /opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/poly_collection/detail/any_iterator.hpp:17,
                 from /opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/poly_collection/detail/any_model.hpp:20,
                 from /opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/poly_collection/any_collection.hpp:17,
                 from prog.cc:2:
/opt/wandbox/boost-1.73.0/gcc-9.3.0/include/boost/type_erasure/detail/access.hpp:33:7: note:                 'template<class Concept, class T> class boost::type_erasure::any'
   33 | class any;
      |       ^~~

The current version is the same as 1.73, the problem is here.

The type_erasure:: prefix solves this issue, but who knows what else can cause.

test_construction failed on Dinkumware

There are a number of tests from test_construction failed on Dinkumware. I see some tests in test_construction.cpp have worked around for BOOST_LIBSTDCXX_VERSION. Any adaptation needed for BOOST_DINKUMWARE_STDLIB?

The Dinkumware version I'm using is 804:
BOOST_DINKUMWARE_STDLIB=804 [-W#pragma-messages]
BOOST_STDLIB="Dinkumware standard library version " "804" [-W#pragma-messages]

The failed tests as below:
../libs/poly_collection/test/test_construction.cpp(97): test 'p3.get_allocator().comes_from(root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = false, PolyCollection = boost::poly_collection::any_collection<boost::type_erasure::incrementable<boost::type_erasure::_self>, std::allocator<boost::type_erasure::any<boost::mpl::vector2<boost::type_erasure::incrementable<boost::type_erasure::_self>, boost::type_erasure::typeid_<boost::type_erasure::_self> >, boost::type_erasure::_self &> > >, ValueFactory = test_utilities::auto_increment, Types = <any_types::incrementable1, double, any_types::incrementable3, int, boost::type_erasure::any<boost::mpl::vector4<boost::type_erasure::copy_constructible<boost::type_erasure::_self>, boost::type_erasure::assignable<boost::type_erasure::_self, const boost::type_erasure::_self &>, boost::type_erasure::incrementable<boost::type_erasure::_self>, any_types::convertible_to_int<boost::type_erasure::_self> >, boost::type_erasure::_self>>]' ../libs/poly_collection/test/test_construction.cpp(116): test 'p2.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = false, PolyCollection = boost::poly_collection::any_collection<boost::type_erasure::incrementable<boost::type_erasure::_self>, std::allocator<boost::type_erasure::any<boost::mpl::vector2<boost::type_erasure::incrementable<boost::type_erasure::_self>, boost::type_erasure::typeid_<boost::type_erasure::_self> >, boost::type_erasure::_self &> > >, ValueFactory = test_utilities::auto_increment, Types = <any_types::incrementable1, double, any_types::incrementable3, int, boost::type_erasure::any<boost::mpl::vector4<boost::type_erasure::copy_constructible<boost::type_erasure::_self>, boost::type_erasure::assignable<boost::type_erasure::_self, const boost::type_erasure::_self &>, boost::type_erasure::incrementable<boost::type_erasure::_self>, any_types::convertible_to_int<boost::type_erasure::_self> >, boost::type_erasure::_self>>]' ../libs/poly_collection/test/test_construction.cpp(116): test 'p2.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::any_collection<boost::type_erasure::incrementable<boost::type_erasure::_self>, std::allocator<boost::type_erasure::any<boost::mpl::vector2<boost::type_erasure::incrementable<boost::type_erasure::_self>, boost::type_erasure::typeid_<boost::type_erasure::_self> >, boost::type_erasure::_self &> > >, ValueFactory = test_utilities::auto_increment, Types = <any_types::incrementable1, double, any_types::incrementable3, int, boost::type_erasure::any<boost::mpl::vector4<boost::type_erasure::copy_constructible<boost::type_erasure::_self>, boost::type_erasure::assignable<boost::type_erasure::_self, const boost::type_erasure::_self &>, boost::type_erasure::incrementable<boost::type_erasure::_self>, any_types::convertible_to_int<boost::type_erasure::_self> >, boost::type_erasure::_self>>]' ../libs/poly_collection/test/test_construction.cpp(143): test 'p3.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::any_collection<boost::type_erasure::incrementable<boost::type_erasure::_self>, std::allocator<boost::type_erasure::any<boost::mpl::vector2<boost::type_erasure::incrementable<boost::type_erasure::_self>, boost::type_erasure::typeid_<boost::type_erasure::_self> >, boost::type_erasure::_self &> > >, ValueFactory = test_utilities::auto_increment, Types = <any_types::incrementable1, double, any_types::incrementable3, int, boost::type_erasure::any<boost::mpl::vector4<boost::type_erasure::copy_constructible<boost::type_erasure::_self>, boost::type_erasure::assignable<boost::type_erasure::_self, const boost::type_erasure::_self &>, boost::type_erasure::incrementable<boost::type_erasure::_self>, any_types::convertible_to_int<boost::type_erasure::_self> >, boost::type_erasure::_self>>]' ../libs/poly_collection/test/test_construction.cpp(179): test 'p2.get_allocator().comes_from(Propagate?root2:root1)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::any_collection<boost::type_erasure::incrementable<boost::type_erasure::_self>, std::allocator<boost::type_erasure::any<boost::mpl::vector2<boost::type_erasure::incrementable<boost::type_erasure::_self>, boost::type_erasure::typeid_<boost::type_erasure::_self> >, boost::type_erasure::_self &> > >, ValueFactory = test_utilities::auto_increment, Types = <any_types::incrementable1, double, any_types::incrementable3, int, boost::type_erasure::any<boost::mpl::vector4<boost::type_erasure::copy_constructible<boost::type_erasure::_self>, boost::type_erasure::assignable<boost::type_erasure::_self, const boost::type_erasure::_self &>, boost::type_erasure::incrementable<boost::type_erasure::_self>, any_types::convertible_to_int<boost::type_erasure::_self> >, boost::type_erasure::_self>>]' ../libs/poly_collection/test/test_construction.cpp(180): test 'p3.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::any_collection<boost::type_erasure::incrementable<boost::type_erasure::_self>, std::allocator<boost::type_erasure::any<boost::mpl::vector2<boost::type_erasure::incrementable<boost::type_erasure::_self>, boost::type_erasure::typeid_<boost::type_erasure::_self> >, boost::type_erasure::_self &> > >, ValueFactory = test_utilities::auto_increment, Types = <any_types::incrementable1, double, any_types::incrementable3, int, boost::type_erasure::any<boost::mpl::vector4<boost::type_erasure::copy_constructible<boost::type_erasure::_self>, boost::type_erasure::assignable<boost::type_erasure::_self, const boost::type_erasure::_self &>, boost::type_erasure::incrementable<boost::type_erasure::_self>, any_types::convertible_to_int<boost::type_erasure::_self> >, boost::type_erasure::_self>>]' ../libs/poly_collection/test/test_construction.cpp(97): test 'p3.get_allocator().comes_from(root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = false, PolyCollection = boost::poly_collection::base_collection<base_types::base, std::allocator<base_types::base> >, ValueFactory = test_utilities::auto_increment, Types = <base_types::derived1, base_types::derived2, base_types::derived3, base_types::derived4, base_types::derived5>]' ../libs/poly_collection/test/test_construction.cpp(116): test 'p2.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = false, PolyCollection = boost::poly_collection::base_collection<base_types::base, std::allocator<base_types::base> >, ValueFactory = test_utilities::auto_increment, Types = <base_types::derived1, base_types::derived2, base_types::derived3, base_types::derived4, base_types::derived5>]' ../libs/poly_collection/test/test_construction.cpp(116): test 'p2.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::base_collection<base_types::base, std::allocator<base_types::base> >, ValueFactory = test_utilities::auto_increment, Types = <base_types::derived1, base_types::derived2, base_types::derived3, base_types::derived4, base_types::derived5>]' ../libs/poly_collection/test/test_construction.cpp(143): test 'p3.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::base_collection<base_types::base, std::allocator<base_types::base> >, ValueFactory = test_utilities::auto_increment, Types = <base_types::derived1, base_types::derived2, base_types::derived3, base_types::derived4, base_types::derived5>]' ../libs/poly_collection/test/test_construction.cpp(179): test 'p2.get_allocator().comes_from(Propagate?root2:root1)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::base_collection<base_types::base, std::allocator<base_types::base> >, ValueFactory = test_utilities::auto_increment, Types = <base_types::derived1, base_types::derived2, base_types::derived3, base_types::derived4, base_types::derived5>]' ../libs/poly_collection/test/test_construction.cpp(180): test 'p3.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::base_collection<base_types::base, std::allocator<base_types::base> >, ValueFactory = test_utilities::auto_increment, Types = <base_types::derived1, base_types::derived2, base_types::derived3, base_types::derived4, base_types::derived5>]' ../libs/poly_collection/test/test_construction.cpp(97): test 'p3.get_allocator().comes_from(root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = false, PolyCollection = boost::poly_collection::function_collection<function_types::int_alias (int), std::allocator<boost::poly_collection::detail::callable_wrapper<function_types::int_alias (int)> > >, ValueFactory = test_utilities::auto_increment, Types = <function_types::function1, function_types::function2, function_types::function3, function_types::function4, function_types::function5>]' ../libs/poly_collection/test/test_construction.cpp(116): test 'p2.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = false, PolyCollection = boost::poly_collection::function_collection<function_types::int_alias (int), std::allocator<boost::poly_collection::detail::callable_wrapper<function_types::int_alias (int)> > >, ValueFactory = test_utilities::auto_increment, Types = <function_types::function1, function_types::function2, function_types::function3, function_types::function4, function_types::function5>]' ../libs/poly_collection/test/test_construction.cpp(116): test 'p2.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::function_collection<function_types::int_alias (int), std::allocator<boost::poly_collection::detail::callable_wrapper<function_types::int_alias (int)> > >, ValueFactory = test_utilities::auto_increment, Types = <function_types::function1, function_types::function2, function_types::function3, function_types::function4, function_types::function5>]' ../libs/poly_collection/test/test_construction.cpp(143): test 'p3.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::function_collection<function_types::int_alias (int), std::allocator<boost::poly_collection::detail::callable_wrapper<function_types::int_alias (int)> > >, ValueFactory = test_utilities::auto_increment, Types = <function_types::function1, function_types::function2, function_types::function3, function_types::function4, function_types::function5>]' ../libs/poly_collection/test/test_construction.cpp(179): test 'p2.get_allocator().comes_from(Propagate?root2:root1)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::function_collection<function_types::int_alias (int), std::allocator<boost::poly_collection::detail::callable_wrapper<function_types::int_alias (int)> > >, ValueFactory = test_utilities::auto_increment, Types = <function_types::function1, function_types::function2, function_types::function3, function_types::function4, function_types::function5>]' ../libs/poly_collection/test/test_construction.cpp(180): test 'p3.get_allocator().comes_from(Propagate?root1:root2)' failed in function 'void test_allocator_aware_construction() [Propagate = true, AlwaysEqual = true, PolyCollection = boost::poly_collection::function_collection<function_types::int_alias (int), std::allocator<boost::poly_collection::detail::callable_wrapper<function_types::int_alias (int)> > >, ValueFactory = test_utilities::auto_increment, Types = <function_types::function1, function_types::function2, function_types::function3, function_types::function4, function_types::function5>]' 18 errors detected.

gcc 4.8.2?

I noticed that the explicit-failures-markup.xml has:

    <!-- poly_collection -->
...
          <toolset name="gcc-4.*"/>

Are you sure you want to exclude gcc 4.8? Because it has pretty decent C++11 support, I am using it with Beast (which requires C++11).

I'm excluding just these for beast:

            <toolset name="gcc-4.0.*"/>
            <toolset name="gcc-4.1.*"/>
            <toolset name="gcc-4.2.*"/>
            <toolset name="gcc-4.3.*"/>
            <toolset name="gcc-4.4.*"/>
            <toolset name="gcc-4.5.*"/>
            <toolset name="gcc-4.6.*"/>
            <toolset name="gcc-4.7.*"/>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.