In my experience, I typically have a pointer and size in hand, rather than begin/end pair, and have to repeat the pointer in the second argument and manually add the size to it to emulate begin/end semantics, just for array_view to subtract these again to pass to the private constructor. I always wish I could just say (pointer, size) instead. Concretely:
void ArrayViewExample(uint8_t* buffer, uint32_t size)
{
for (const auto& byte : winrt::array_view(buffer, buffer + size)) { /* ... */ }
// vs
for (const auto& byte : winrt::array_view(buffer, size)) { /* ... */ }
}