Functions aren't values, so they can't be non-type template parameters; but pointers to functions can be:
template <typename T_res, typename RT, typename DT, RT (*func) (size_t, DT*)>
struct GL_resource<T_res, RT (*)(size_t, DT*), func>
{
~GL_resource()
{
func(1, name);
}
};
Note that functions are subject to pointer decay even when used as non-type template parameters, so FT
will always be a pointer-to-function type, not a function type.