Thanks for working on this. My comments so far regarding the proposed templates and overloads for the "narrow rounding functions"...

C's tgmath.h does not require the arguments to have the same type, but the templates do have such a requirement when the F type is not explicitly specified.

Also, C's tgmath.h allows for
fop(0., 0.L); // calls the underlying math.h fopl function

but the proposed overload sets in C++ each have an ambiguity between the `double` and `long double` overloads for the above case (whereas the overload set for `pow` in C++ does not have this problem because of the "sufficient overloads" provision of https://wg21.link/cmath.syn#3 for floating-point-type).
 
Hmm okay, I thought we just don't support that, but we do, apparently. I guess the provision will have to be expanded. This also means that I'll need to relax the constraints on the function templates somewhat.

Aside:
We seem to be missing an Annex C entry documenting the inability to suppress <tgmath.h>-like behaviour by suppressing macro replacement (e.g., via use of parentheses around the "function" name).

That seems like a general problem that an LWG issue could address at any time.
 
Thanks for the review!