# Extra Clang Tools 21.1.6 documentation

## clang-tidy - boost-use-ranges

# boost-use-ranges

Detects calls to standard library iterator algorithms that could be replaced with a Boost ranges version instead.

## Example

    auto Iter1 = std::find(Items.begin(), Items.end(), 0);
    auto AreSame = std::equal(Items1.cbegin(), Items1.cend(), std::begin(Items2),
                              std::end(Items2));

Transforms to:

    auto Iter1 = boost::range::find(Items, 0);
    auto AreSame = boost::range::equal(Items1, Items2);

## Supported algorithms

Calls to the following std library algorithms are checked:

`std::accumulate`, `std::adjacent_difference`, `std::adjacent_find`, `std::all_of`, `std::any_of`, `std::binary_search`, `std::copy_backward`, `std::copy_if`, `std::copy`, `std::count_if`, `std::count`, `std::equal_range`, `std::equal`, `std::fill`, `std::find_end`, `std::find_first_of`, `std::find_if_not`, `std::find_if`, `std::find`, `std::for_each`, `std::generate`, `std::includes`, `std::iota`, `std::is_partitioned`, `std::is_permutation`, `std::is_sorted_until`, `std::is_sorted`, `std::lexicographical_compare`, `std::lower_bound`, `std::make_heap`, `std::max_element`, `std::merge`, `std::min_element`, `std::mismatch`, `std::next_permutation`, `std::none_of`, `std::partial_sum`, `std::partial_sort_copy`, `std::partition_copy`, `std::partition_point`, `std::partition`, `std::pop_heap`, `std::prev_permutation`, `std::push_heap`, `std::random_shuffle`, `std::reduce`, `std::remove_copy_if`, `std::remove_copy`, `std::remove_if`, `std::remove`, `std::replace_copy_if`, `std::replace_copy`, `std::replace_if`, `std::replace`, `std::reverse_copy`, `std::reverse`, `std::search`, `std::set_difference`, `std::set_intersection`, `std::set_symmetric_difference`, `std::set_union`, `std::sort_heap`, `std::sort`, `std::stable_partition`, `std::stable_sort`, `std::transform`, `std::unique_copy`, `std::unique`, `std::upper_bound`.

The check will also look for the following functions from the `boost::algorithm` namespace:

`all_of_equal`, `any_of_equal`, `any_of`, `apply_permutation`, `apply_reverse_permutation`, `clamp_range`, `copy_if_until`, `copy_if_while`, `copy_if`, `copy_until`, `copy_while`, `find_backward`, `find_if_backward`, `find_if_not_backward`, `find_if_not`, `find_not_backward`, `hex_lower`, `hex`, `iota`, `all_of`, `is_decreasing`, `is_increasing`, `is_palindrome`, `is_partitioned_until`, `is_partitioned`, `is_permutation`, `is_sorted_until`, `is_sorted`, `is_strictly_decreasing`, `is_strictly_increasing`, `none_of_equal`, `none_of`, `one_of_equal`, `one_of`, `partition_copy`, `partition_point`, `reduce`, `unhex`.

## Reverse Iteration

If calls are made using reverse iterators on containers, The code will be fixed using the `boost::adaptors::reverse` adaptor.

    auto AreSame = std::equal(Items1.rbegin(), Items1.rend(),
                              std::crbegin(Items2), std::crend(Items2));

Transforms to:

    auto AreSame = boost::range::equal(boost::adaptors::reverse(Items1),
                                       boost::adaptors::reverse(Items2));

## Options

IncludeStyle

  A string specifying which include-style is used, llvm or google. Default is llvm.

IncludeBoostSystem

  If true (default value) the boost headers are included as system headers with angle brackets (#include <boost.hpp>), otherwise quotes are used (#include “boost.hpp”).

UseReversePipe

  When true (default false), fixes which involve reverse ranges will use the pipe adaptor syntax instead of the function syntax.

      std::find(Items.rbegin(), Items.rend(), 0);

  Transforms to:

      boost::range::find(Items | boost::adaptors::reversed, 0);