Я изучаю, как получить type
возвращаемого значения перегруженной функции test()
vs test(double)
.
Я изменил код из SO-ответа (от Криса).
#include <type_traits>
#include <utility>
int test();
double test(double x);
template<typename... Ts>
using TestType = decltype(test(std::declval<Ts>()...))(Ts...);
int main() {
std::result_of< TestType<double> >::type n = 0;
//^ ### compile error ###
using doubleDat = std::result_of< TestType<double> >::type ;
doubleDat n=0;
}
У меня ошибка компиляции.
ошибка: нет типа с именем 'type' в 'std :: result_of'
Насколько я понимаю: -
TestType<...>
- это «вариативный шаблон».
По моим собственным словам, он действует как сжатое сокращение с любым количеством параметров.TestType<double>
- это идентификатор функцииtest(double)
.std::result_of<TestType<double>>::type
- тип возвращаемого значенияtest(double)
.doubleDat
должен бытьdouble
.
Вопрос: Почему не компилируется? Как это решить?
Я читал это:
- decltype для перегруженной функции-члена - нет примера о
std::result_of
- c ++: ошибка: нет типа с именем 'type' in 'class std :: result_of ‹void (* (std :: unordered_map - проблема относится к теме, а не к
std::result_of
Подсказка: после долгих поисков я чувствую слабый запах того, что мой код подвергается "самому неприятному синтаксическому анализу".