История изменений
Исправление AntonI, (текущая версия) :
Можно вопросов по коду?
template <typename T>
constexpr auto has_double_multiply(T* ) -> decltype(declval<T>() * 1.0, true) {
return true;
}
template <typename T> constexpr bool has_double_multiply(...) { return false; }
ЕМНИП перегрузка с аргументами (…) имеет наинизший приоритет при разрешении (или как там оно называется), именно за счет этого оно и работает? А насколько нужен declval ?
template <typename U = T,
typename enable_if<has_double_multiply<U>(nullptr), int>::type = 0>
U f(double y) const {
return x * y;
}
я не понимаю зачем вводить U (почему нельзя везде просто написать T), но без него не работает;-(
Исходная версия AntonI, :
Можно вопросов по коду?
template <typename T>
constexpr auto has_double_multiply(T* ) -> decltype(declval<T>() * 1.0, true) {
return true;
}
template <typename T> constexpr bool has_double_multiply(...) { return false; }
ЕМНИП перегрузка с аргументами (…) имеет наинизший приоритет при разрешении (или как там оно называется), именно за счет этого оно и работает? А насколько нужен declvar ?
template <typename U = T,
typename enable_if<has_double_multiply<U>(nullptr), int>::type = 0>
U f(double y) const {
return x * y;
}
я не понимаю зачем вводить U (почему нельзя везде просто написать T), но без него не работает;-(