#include <ranges>
#include "types.h"
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
static_assert( std::is_constructible_v<ForwardSubrange, ForwardIter, ForwardIter>);
static_assert(!std::is_constructible_v<ForwardSubrange, Empty, ForwardIter>);
static_assert( std::is_constructible_v<ConvertibleForwardSubrange, ConvertibleForwardIter, int*>);
static_assert( std::is_constructible_v<ForwardSubrange, ForwardIter, ForwardIter>);
constexpr bool test() {
ForwardSubrange a(ForwardIter(globalBuff), ForwardIter(globalBuff + 8));
assert(base(a.begin()) == globalBuff);
assert(base(a.end()) == globalBuff + 8);
ConvertibleForwardSubrange b(ConvertibleForwardIter(globalBuff), globalBuff + 8);
assert(b.begin() == globalBuff);
assert(b.end() == globalBuff + 8);
return true;
}
int main(int, char**) {
test();
static_assert(test());
return 0;
}