decltype
терпит неудачу, если функция, с которой вы звоните, перегружена, как в этом коде:
#include <iostream>
int test(double x, double y);
double test(int x, int y);
char test(char x, int y);
int main()
{
std::cout << decltype(test) << std::endl;
return 0;
}
Результаты:
error: decltype cannot resolve address of overloaded function
Я понимаю, что это потому, что decltype
не может определить, какую функцию вы пытаетесь получить. Но почему нет другого способа сделать эту работу следующим образом:
std::cout << decltype(test(double, double)) << std::endl;
или это:
double x = 5, y = 2;
std::cout << decltype(test(x, y)) << std::endl;
Поскольку функция не может быть перегружена просто на основе типа возврата, не будет передаваться ни тип данных, ни фактические переменные в вызов decltype
, чтобы рассказать, какую из перегрузок он должен исследовать? Что мне здесь не хватает?