Opened 9 years ago

#9396 new Bugs

circular_buffer + gil compiler error

Reported by: g.kuehnert <g.kuehnert@…> Owned by: Jan Gaspar
Milestone: To Be Determined Component: circular_buffer
Version: Boost 1.55.0 Severity: Regression
Keywords: Cc:

Description

When 'boost/gil/bit_aligned_pixel_iterator.hpp' is included, the compiler selects for whatever reason an std::uninitialized_copy overload from the gil header instead of boost::cb_detail::uninitialized_copy within boost::cb_detail::uninitialized_move_if_noexcept_impl (boost/circualr_buffer/details.hpp) for types with !boost::is_nothrow_move_constructible. A workaround (solution?) is to fully qualify the call to boost::cb_detail::uninitialized_copy, but why the std overload gets even selected? Is this a compiler bug? Or a gil problem?

Tested on: Windows 7 SP1 x64 + MSVC 2010 SP1

#include <boost/circular_buffer.hpp>
#include <boost/gil/bit_aligned_pixel_iterator.hpp>	// comment this to resolve

struct Foo
{
	Foo(const Foo&) {}
};

int main(int, char*[])
{

#if 1

	boost::circular_buffer<Foo> buffer;
	
	buffer.set_capacity(42);

#endif

#if 0	// minimum example

	typedef boost::cb_details::iterator<
		boost::circular_buffer<int>
		, boost::cb_details::nonconst_traits<
			std::allocator<int>
		>
	> InputIterator;
	
	boost::cb_details::uninitialized_move_if_noexcept_impl<int>(InputIterator(), InputIterator(), (int*)nullptr, boost::false_type());

#endif

	return 0;
}

Change History (0)

Note: See TracTickets for help on using tickets.