#include <array>#include <deque>#include <list>#include <mdspan>#include <ranges>#include <set>#include <span>#include <string_view>#include <valarray>#include <vector> template<typename T>concept CR= std::ranges::contiguous_range<T>; // zstring being a ranges::contiguous_range doesn't have to be a ranges::sized_rangestruct zstring{struct sentinel{friendconstexprbool operator==(constchar* str, sentinel)noexcept{return*str=='\0';}}; constchar* str; constchar* begin()constnoexcept{return str;} sentinel end()constnoexcept{return{};}}; int main(){int a[4]; static_assert( CR<std::vector<int>> and not CR<std::vector<bool>> and not CR<std::deque<int>> and CR<std::valarray<int>> and CR<decltype(a)> and not CR<std::list<int>> and not CR<std::set<int>> and CR<std::array<std::list<int>,42>> and CR<std::string_view> and CR<zstring> and CR<std::span<constint>> and not CR<std::mdspan<int,std::dims<1>>>);}