Bestimmen, welche Überlastung ausgewählt wurde

Nehmen wir an, ich habe eine willkürlich komplizierte überladene Funktion:

template <class T> void foo(T&& );
template <class T> void foo(T* );
void foo(int );

Ich möchte für einen bestimmten Ausdruck wissen,welch foo() wird gerufen. Zum Beispiel ein Makro @ gegebWHICH_OVERLOAD:

using T = WHICH_OVERLOAD(foo, 0);       // T is void(*)(int);
using U = WHICH_OVERLOAD(foo, "hello"); // U is void(*)(const char*);
// etc.

Ich weiß nicht, wo ich so etwas verwenden würde - ich bin nur neugierig, ob es möglich ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage