Size: a a a

2020 April 26

v

vehlwn in pro.cxx
Специализируем fuu чем угодно, поэтому эта специализация всегда приоритетнее?
источник

AK

Anton Kashcheev in pro.cxx
Alex
это не должно быть важно, мы гоним поток байт с платформы LE и перекладываем в регистры/память другой системы с LE, чтоб там об этих данных будет думать сетевая карта - пофиг
ARM-ы умеют в be, Power ещё жива.
источник

A

Alex in pro.cxx
у меня такое впечатление, что ошибка '==': no conversion from 'R' to '_Ty1' не SFINAE-friendly, может такое быть? И как это можно выяснить, где-то есть перечень типов ошибок?
источник

v

vehlwn in pro.cxx
Alex
у меня такое впечатление, что ошибка '==': no conversion from 'R' to '_Ty1' не SFINAE-friendly, может такое быть? И как это можно выяснить, где-то есть перечень типов ошибок?
Потому что ты неправильную специализацию написал. На цппрефе в статье про void_t есть же правильный пример.
источник

A

Alex in pro.cxx
хм, а что, если выражение внутри decltype невалидно, decltype вычисляется в пустоту? Я думал, весь этот шаблон отвалится, как будет его не существует в исходном коде
источник

DF

Dollar Føølish in pro.cxx
Да,должна перегрузка отвалиться
источник

DF

Dollar Føølish in pro.cxx
Просто деклтайп должен быть в позиции типа
источник

A

Alex in pro.cxx
vehlwn
Потому что ты неправильную специализацию написал. На цппрефе в статье про void_t есть же правильный пример.
да, похоже, что так работает, но я не понимаю, почему
источник

A

Alex in pro.cxx
template <typename L, typename R, typename = std::void_t<>>
struct is_equal_comparable {
 static constexpr bool value = false;
};

template <typename L, typename R>
struct is_equal_comparable<L, R, std::void_t<decltype(std::declval<L>() == std::declval<R>())>> {
 static constexpr bool value = true;
};
источник

A

Alex in pro.cxx
std::void_t<> - это void. std::void_t<decltype(whatever)> - тоже войд. Как минимум эти две специализации идентичны и должна быть ошибка, как максимум - отвалится та, где whatever не вычислимо, и тогда кажется, что здесь перепутаны ветки true и false. Но по факту это работает правильно, а я ничего не понимаю.
источник

v

vehlwn in pro.cxx
Alex
std::void_t<> - это void. std::void_t<decltype(whatever)> - тоже войд. Как минимум эти две специализации идентичны и должна быть ошибка, как максимум - отвалится та, где whatever не вычислимо, и тогда кажется, что здесь перепутаны ветки true и false. Но по факту это работает правильно, а я ничего не понимаю.
Не идентичны. Пример с бегином и ендом же работает.
источник

v

vehlwn in pro.cxx
Alex
std::void_t<> - это void. std::void_t<decltype(whatever)> - тоже войд. Как минимум эти две специализации идентичны и должна быть ошибка, как максимум - отвалится та, где whatever не вычислимо, и тогда кажется, что здесь перепутаны ветки true и false. Но по факту это работает правильно, а я ничего не понимаю.
Ты ставил свинью в первичный шаблон, который никогда не сработает, потому что специализация приоритетнее.
источник

v

vehlwn in pro.cxx
Alex
template <typename L, typename R, typename = std::void_t<>>
struct is_equal_comparable {
 static constexpr bool value = false;
};

template <typename L, typename R>
struct is_equal_comparable<L, R, std::void_t<decltype(std::declval<L>() == std::declval<R>())>> {
 static constexpr bool value = true;
};
Здесь свинья в специализации.
источник

A

Alex in pro.cxx
хмм, спасибо. То есть это валидно, когда параметры специализации совпадают с параметрами базового шаблона? Всё равно гарантированно выберется специализация?
источник

A

Alex in pro.cxx
Это я нашёл очередной баг в msvc, или здесь что-то хитрое происходит? https://godbolt.org/z/DvRQVJ
источник

v

vehlwn in pro.cxx
Alex
хмм, спасибо. То есть это валидно, когда параметры специализации совпадают с параметрами базового шаблона? Всё равно гарантированно выберется специализация?
Не гарантированно, а только если нет ошибок.
источник

A

Alex in pro.cxx
Да, я это и имел виду. Спасибо, буду знать, постараюсь не забыть до следующего раза)
источник

A

Alex in pro.cxx
источник

A

Alex in pro.cxx
я думал, что-то не так со ссылкой на годболт)
источник

A

Alex in pro.cxx
тогда не будет работать <int, int>?
источник