Opened 5 years ago
Last modified 5 years ago
#13276 new Bugs
circular_buffer pulls in exception handling code
Reported by: | anonymous | Owned by: | Jan Gaspar |
---|---|---|---|
Milestone: | To Be Determined | Component: | circular_buffer |
Version: | Boost 1.65.0 | Severity: | Problem |
Keywords: | Cc: | doug.a.brunner@… |
Description
circular_buffer
as shipped doesn't work for embedded applications - it ends up adding EH (and thus printf
, etc.), which adds unacceptable bloat for devices without much flash. The problem is that, even if you create a non-throwing allocator, circular_buffer::allocate(size_type n)
still first checks n
against the allocator's max_size()
, and throws if it is too large.
As I understand it, an allocator should throw/assert anyway (depending on whether it's using EH or not) if you try to allocate()
more than max_size()
, so I've been patching by deleting the involved lines:
- if (n > max_size()) - throw_exception(std::length_error("circular_buffer"));
These lines should at least get excluded from compilation, or replaced with an assert, if BOOST_NOEXCEPT
is defined.