There is a very strong problems with this requirement. C++ does allow overloading for native C++ functions, but not for "C"language linkages. Linkage specifications [dcl.link] §6 says:
At most one function with a particular name can have C language linkage.
And your templating attempt is equivalent to declaring explicitely:
extern "C" void fortran_function(double *);
extern "C" void fortran_function(float *);
This would declare 2 different function with C language linkage and the same name => explicitely forbidden by C++ standard.
The rationale behind that is that common implementation use name mangling to build a function identifier containing the argument types for the linker to be able to identify them. The C language linkage precisely avoid that name mangling to allow interfacing with C language functions. That immediately defeats any overloading possibility.
Anyway, you will not be able to define 2 C or Fortran functions with the same name and using different parameters. The best I can imagine is to do manual mangling:
extern "C" void fortran_function_double(double *);
extern "C" void fortran_function_float(float *);
Maybe you could use macros to ease multiple declarations, but I am really not proficient enough in macro meta-programming...