turns out that passing constructing & destroying a std::function costs 24ns.
This in itself is not that dire until you do it a billion times.