Size: a a a

2020 August 03

KR

Kai Ren in rust_offtopic
Переслано от Roman na
inmap auto x = b{};
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
здесь тип x будет b
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
а не inmap
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
inmap<b>, либо ещё какая херня
источник

KR

Kai Ren in rust_offtopic
Переслано от Roman na
если говорить о том, чем requires отличается от интерфейсом дерьма - всё очень просто. Интерфейсы не могут существовать в полиморфном коде
источник

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
и оно всё там инстанцируется, тайпчекается само. 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 остаётся. С концептами тоже самое примерно
источник