 
                            ...
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| #include <functional>
#include <iostream>
 
template <typename Ty>
bool in_range(const Ty *test, const Ty *r, size_t n) {
  std::less<const Ty *> less;
  return !less(test, r) && less(test, r + n);
}
 
void f() {
  double foo[10];
  double *x = &foo[0];
  double bar;
  std::cout << std::boolalpha << in_range(&bar, x, 10);
} | 
Compliant Solution
There is no standard way to efficiently and portably determine if a pointer or iterator lives within a valid range.
In this compliant solution, a fully portable but likely inefficient equality comparing This compliant solution demonstrates a fully-portable, but likely inefficient, implementation of in_range() which compares test against each possible address in the range [r, n] is used to implement the in_range() function:.
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| #include <iostream>
 
template <typename Ty>
bool in_range(const Ty *test, const Ty *r, size_t n) {
  auto *cur = reinterpret_cast<const unsigned char *>(r);
  auto *end = reinterpret_cast<const unsigned char *>(r + n);
  auto *testPtr = reinterpret_cast<const unsigned char *>(test);
 
  for (; cur != end; ++cur) {
    if (cur == testPtr) {
      return true;
    }
  }
  return false;
}
 
void f() {
  double foo[10];
  double *x = &foo[0];
  double bar;
  std::cout << std::boolalpha << in_range(&bar, x, 10);
}
 | 
...