Hi, thanks for the report!
I don’t plan to bring these constructors back.
Indeed, I removed these constructors with this PR, and their removal is also mentioned in the 6.40 release notes:
The TF1, TF2, and TF3 constructors for CINT compatibility were removed. This concerns the templated constructors that additionally took the name of the used functor class and member function. With ROOT 6, these names can be omitted.
The removal had a clear motivation: these constructors with the unused arguments made it even more complicated for users to figure out which of the many constructors they should use, and because const char* can also be implicitly created from zero-like literals, it was also very easy to accidentally end up with the now-removed overload by accident, resulting in wrong behavior of the code while still compiling.
Here is a little ROOT macro that illustrates the exact user story that prompted me to remove the overloads. This was seemingly absurd behavior to the user in ROOT 6.38, which is fixed in 6.40 with the char * overloads gone:
class MyFunction {
public:
double Evaluate(double *x, double *p) { return p[0] * p[1]; }
};
void cint_ctor_trap()
{
MyFunction obj;
const Int_t npar = 2;
TF1 fOK("fOK", &obj, &MyFunction::Evaluate, 0, 1, npar, 0, TF1::EAddToList::kDefault);
// You think you can just use the literal "0" instead of a TF1::EAddToList::kDefault
// (which also has value 0)?
// Get ready for a surprise! The conversion to char * will hit and you get a different constructor!
TF1 fBug("fBug", &obj, &MyFunction::Evaluate, 0, 1, npar, 0, 0);
std::cout << fOK.GetNdim() << std::endl; // gives 0, correctly
std::cout << fBug.GetNdim() << std::endl; // gives 1!
}
Therefore, I concluded that the breakage of existing code is the lesser evil, because at least there are clear compiler errors that one can easily fix by not passing the unused string argument. This change is completely backwards compatible too, because the overloads without the const char* argument exist since ROOT 6. So you can cleanly update your code without adding more boilerplate like ROOT_VERSION_CODE preprocessor macro checks.
We try to not break use code by removing stuff just for the fun of it, only if there is a particular reason 
Cheers,
Jonas