in fatal/type/impl/trie.h [96:136]
static inline bool f(
std::size_t const size,
NeedleBegin &&begin,
Visitor &&visitor,
VArgs &&...args
) {
using haystack_data = typename Filter::template apply<Haystack>;
if (size < End - Begin - Offset) {
return false;
}
if (!IsTerminal && size == End - Begin - Offset) {
return false;
};
using value_type = typename std::iterator_traits<
typename std::decay<NeedleBegin>::type
>::value_type;
auto i = std::next(begin, End - Begin - Offset);
if (!std::equal(
begin,
i,
std::next(z_data<haystack_data, value_type>(), Offset + Begin)
)) {
return false;
}
if (IsTerminal && size == End - Begin - Offset) {
visitor(tag<Haystack>(), static_cast<VArgs &&>(args)...);
return true;
}
return l<0, Filter, Children...>::f(
size - (End - Begin - Offset),
std::move(i),
static_cast<Visitor &&>(visitor),
static_cast<VArgs &&>(args)...
);
}