...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The header <boost/core/pointer_in_range.hpp> provides the function
template boost::pointer_in_range
to check if a pointer
is in a given range. This can be used in constant expressions in C++14 or
higher when the compiler has a builtin to support std::is_constant_evaluated
.
The following is an example of an allocator's deallocation function that does nothing if the pointer falls within a small automatically allocated buffer.
template<class T, class N> void Allocator<T, N>::deallocate(pointer ptr, size_type) { if (!boost::pointer_in_range(ptr, buffer_, buffer_ + N)) { ::operator delete(ptr); } }
namespace boost { template<class T> constexpr bool pointer_in_range(const T* ptr, const T* begin, const T* end); } /* boost */
template<class T> constexpr
bool pointer_in_range(const T* ptr, const T* begin, const T* end);
[begin,end)
is a valid range.
true
if ptr
is in range [begin,end)
, otherwise false
.
If boost::pointer_in_range
is not usable in constant
expressions the macro BOOST_CORE_NO_CONSTEXPR_POINTER_IN_RANGE
is defined.
Glen Fernandes implemented pointer_in_range
.