Size: a a a

2020 August 05

KR

Kai Ren in rust_offtopic
Переслано от Roman na
и оно всё там инстанцируется, тайпчекается само. requires сериализует эти результаты в bool
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
и если в скриптухе эти "ограничения" нужны для типизации - в С++ они не нужны для этого
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
всё итак работает. Но в С++ есть перегрузка. И именно для этого, в основном, концепты и нужны - они ограничивают полиморфизм у функций
источник

KR

Kai Ren in rust_offtopic
Переслано от Kai Ren
А на каком этапе происходит проверка requires
источник

KR

Kai Ren in rust_offtopic
Переслано от Kai Ren
тайпчек или ещё до него?
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
ну там нет как такого "тайпчека". В крестах есть базовый тайпчек, который сишный. Но проще всю стадию компиляцию воспринимать за тайпчек. Ведь что угодно может от чего угодно зависеть
источник

KR

Kai Ren in rust_offtopic
Переслано от Kai Ren
Ну, я с той позиции, что сначала у нас происходит раскрытие шаблонов, а потом тайпчек. Мне вот не совсем понятно в каком месте на этой шкале происходит валидация концепта.
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
а по разному. Инстанцирование может зависеть от результата requires, а может и наоборот
источник

KR

Kai Ren in rust_offtopic
Переслано от Kai Ren
Ну да, логично. Там рекурсивность же должна быть, иначе не раскроется просто всё.
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
но если мы говорим про concept как предикаты для auto|T - они проверяются до параметризации
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
там в крестах есть заморочки с выбором перегрузки. Вызов функции может порождать(условно) множество кандидатов. Некоторые из них могут быть невалидными
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
я где-то описывал всё подробно. Лань искать. Если попроще. Для каждого вызова может номинально подходить несколько функций. Вот этот requires(который первый) работает в этот момент. Есть там false - функция убирается из кандидатов, если true остаётся. С концептами тоже самое примерно
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
https://godbolt.org/z/M1MrKx - так, наверное, понятнее будет
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
первый кандидат отвалился из-за того, что decltype(x[y]) - не сработало и тип вывести не удалось
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
второе откинут потому, что requires false == flase
источник

KR

Kai Ren in rust_offtopic
Переслано от Kai Ren
А если несколько предикатов дают true, есть возможность специфицировать желаемый, и как оно по дефолту подбираться будет?
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
ну там есть "подходимость по типу"
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
так же там есть зачатки "подходимости по концепту". Типа если один включает в себя другой, то этот другой более общий, а значит имеет меньший приоритет
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
но с этим как-то сложно и непонятно на данный момент
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
это значит, что более общий тип имеет меньший приоритет
источник