У меня возникли проблемы с пониманием этого фрагмента кода, который использует SFINAE.Понимание SFINAE Пример
template <typename T>
auto dist() -> typename std::enable_if<std::is_integral<T>::value,
std::uniform_int_distribution<T>>::type;
template <typename T>
auto dist() -> typename std::enable_if<std::is_floating_point<T>::value,
std::uniform_real_distribution<T>>::type;
...
decltype(dist<float>()) unifDistFloat;
decltype(dist<int>()) unifDistInt;
dist()
это название двух различных функциональных прототипов, так что не тело, содержащее оператор возврата. Это означает, что он никогда не возвращает значение типа uniform_real_distribution<T>
, или uniform_int_distribution<T>
.
Так не должно decltype
не удается вызвать неполную функцию? Или decltype
просто не вызывает функцию вообще и вместо этого просто оценивает тип возврата?
второй вариант: 'decltype' просто * * оценивает тип возвращаемого значения. – Jarod42
'decltype' фактически не вызывает ничего. Все, что он делает, это определить * тип * некоторого выражения, * без фактической оценки выражения. * Он просто смотрит на выражение и спрашивает: «Если бы я это оценил, каким будет тип результата?» Это не зависит от тел каких-либо функций или методов, а только от прототипов. – cdhowie