Summary: This was previous put here for ergnomics as to put it in the template required decltype. However, this has the effect of putting an actual functoin pointer in an escaping context if it is not fully removed or inlined. C++17 has a non-type-template parameter that we can use to keep the interface clean. Use that instead.