Определение того, какая перегрузка была выбрана

Допустим, у меня есть произвольная сложная перегруженная функция:

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

Я хочу знать, для данного выражения,который foo() вызывается. Например, учитывая некоторый макросWHICH_OVERLOAD:

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

Я не знаю, где бы я использовал такую ​​вещь - мне просто любопытно, если это возможно.

Ответы на вопрос(2)

Ваш ответ на вопрос