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
типы данных или фактические переменные, чтобы сообщить ей, какую из перегрузок она должна проверять? Что мне здесь не хватает?
decltype
, не удался, когда я дал ему перегруженные функции, и я пытался точно определить проблему. - person cf stands with Monica   schedule 10.03.2014decltype
обычно используется вместе сdeclval
таким образом, чтоdeclval
параметры передаются в функцию для возврата типа. - person rwong   schedule 10.03.2014declval
не используется в этом сегменте кода. Изучив библиотеку подробнее, я думаю, что она пытается использовать возвращаемый тип функции для создания соответствующей функции того же типа. - person cf stands with Monica   schedule 10.03.2014