you can get a similar behavior with operator||
```
template <std::size_t... is>
T test_impl(std::size_t j, std::index_sequence<is...>)
{
T res;
(void)( (j == is ? (res = f<is>(), true) : false) || ... || (throw std::range_error("Out of range"), false) );
return res;
}
```
Unfortunately that requires `T` to be default-constructible and support move-assignment, neither of which is necessarily true in modern code. (Someone might even want to make `test_impl` return a reference.) Worse, it requires all the `f<is>()` to have the same return type.
However, I agree, this should be mentioned in the paper, in a "Tony Table": "here's how you can kinda do it in C++20, versus how I want to be able to do it."
–Arthur