Take the following code as an example.
struct A0{};
struct A1: A0{};
struct A2: A0{};
int operator<<(A1& a, int i){}
int operator<<(A2& a, int i){}
using FA0 = int(*)(A0&,int);
using FA1 = int(*)(A1&,int);
int main()
{
FA0 fa0 = ::operator<<;
}
How can i have fa0 point to the first overloaded << operator? I guess, same question also applies to functions with normal name.