Size: a a a

2020 August 27

Rn

Roman na in pro.cxx
потому как если ты использовал концепты - у тебя как минимум два шаблона. А значит ошибкой всегда будет "не могла"(нет функции для вызова).
источник

Rn

Roman na in pro.cxx
Roman na
потому как если ты использовал концепты - у тебя как минимум два шаблона. А значит ошибкой всегда будет "не могла"(нет функции для вызова).
Забыл. Выше сказал, а тут нет. Есть вариант с одним шаблоном, где констрейты описать static_assert"ом нельзя. Это если нужно, чтобы ошибка не пробивала sfinae.
источник

AS

Alex Sandrov in pro.cxx
Roman na
Отвечу подробней. В сишке связывание вызова/тела происходит через таблицу символов. А сам символ - это его имя. Оно не зависит от сигнатуры. В С++ имя символа формуруется из всей сигнатуры, опять для того, чтобы работало сишное "связывание".

И проблема в том, что мы не можем из тела неявно выводить какие-то свойства, потому как имя символа должно генерироваться одинаковое и из сигантуры и из тела.
Спасибо
источник

Rn

Roman na in pro.cxx
Alex Sandrov
Спасибо
Причём, что удивительно - это почему-то все блюдут. Но то понятно - си с классами, раздельная компиляция. Не понятно почему это не легитимизируют на уровне языка/идеологии. Ведь язык уже давно эти правила нарушает. Очень давно с тем же самым auto f() {}, с теми же корутинами.

Раз уж уже нельзя разделить сигнатуру/тело между единицами трансляции, то почему бы не выделить это в какой-то отдельный класс функций. Где уже реализовывать нормальный язык.

В той же сишке запили инлайн, функций под которым вообще нигде не существует. Почему бы в С++ не добавить семантический инлайн, либо какой-то расширенный статик.
источник

Rn

Roman na in pro.cxx
причём этого нет даже на уровне constexpr. Ну ладно у нас был constexpr и он мог исполняться и в рантайм-контексте. Но у нас появился consteval и ничего не изменилось. decay(так же потеря категорий значений и прочее), параметры функции так же семантически не-constexpr. Ну запретите рекурсию. Что угодно запретите как это уже множество раз было, но пусть оно работает.

Причём даже прототипы чего-то подобного было - те же parametric expressions. И ничего, даже обсуждения всей этой темы.
источник

ПК

Побитый Кирпич... in pro.cxx
Roman na
причём этого нет даже на уровне constexpr. Ну ладно у нас был constexpr и он мог исполняться и в рантайм-контексте. Но у нас появился consteval и ничего не изменилось. decay(так же потеря категорий значений и прочее), параметры функции так же семантически не-constexpr. Ну запретите рекурсию. Что угодно запретите как это уже множество раз было, но пусть оно работает.

Причём даже прототипы чего-то подобного было - те же parametric expressions. И ничего, даже обсуждения всей этой темы.
Что именно должно измениться и работать?
источник

Rn

Roman na in pro.cxx
Побитый Кирпич
Что именно должно измениться и работать?
Я же написал. Сейчас в С++ в связи с возможности разделения на сигнатуру/тело - ничего автоматически выводится не может. Тоже самое с decay. Что изменится? Много. Можно выводить что угодно автоматически - тот же noexcept. Функция может полиморфна по куда большему числу свойств. Допустим, как я выше сказал, не будет затираться категория значений.
источник

ПК

Побитый Кирпич... in pro.cxx
Roman na
Я же написал. Сейчас в С++ в связи с возможности разделения на сигнатуру/тело - ничего автоматически выводится не может. Тоже самое с decay. Что изменится? Много. Можно выводить что угодно автоматически - тот же noexcept. Функция может полиморфна по куда большему числу свойств. Допустим, как я выше сказал, не будет затираться категория значений.
Ну возвращаемый тип можно выводить
источник

ПК

Побитый Кирпич... in pro.cxx
как раз по телу
источник

ПК

Побитый Кирпич... in pro.cxx
Хотя это и не сигнатура
источник

Rn

Roman na in pro.cxx
я обо всём это пиал выше. И про вывод типа возвращаемого значения в частности
источник

ПК

Побитый Кирпич... in pro.cxx
А вот вывод noexcept по телу кажется слишком опасным
источник

Rn

Roman na in pro.cxx
В том и смысл, что подобные явления уже есть. Нарушающие всё то, что было ранее. И непонятно, почему за это "раньше" так сильно держатся. Если оно трещит по швам и всё больше и больше нарушается
источник

Rn

Roman na in pro.cxx
расширение полиморфизма позволит получить и семантические ссылки, т.е. алиасы. Подобным образом сделано в расте, только явно и достаточно костыльно
источник

CD

Constantine Drozdov in pro.cxx
да не важно, что можно получить при помощи той или иной фичи, это не определяет необходимость её реализации
источник

Rn

Roman na in pro.cxx
семантические ссылки/алиасы уже будут safe по определению. Потому как будет известно, что это не просто ссылка, а алиас конкретного объекта, конкретного стореджа
источник

ПК

Побитый Кирпич... in pro.cxx
Roman na
расширение полиморфизма позволит получить и семантические ссылки, т.е. алиасы. Подобным образом сделано в расте, только явно и достаточно костыльно
Дак в С++ ссылки это как раз и есть алиас
источник

Rn

Roman na in pro.cxx
Constantine Drozdov
да не важно, что можно получить при помощи той или иной фичи, это не определяет необходимость её реализации
Что значит не определяет? К тому же проблема не в реализации. Проблема в отсутствии разработки темы вообще, даже теоретической
источник

Rn

Roman na in pro.cxx
Побитый Кирпич
Дак в С++ ссылки это как раз и есть алиас
не, это не тот алиас. Ссылка не знает чего она алиас. Там по пути её можно 10 раз хакнуть, к тому же
источник

Rn

Roman na in pro.cxx
алиас обладает всеми свойствами того, чего он алиас. Это просто альтернативное имя. Со ссылками это не так. Это всё существует на уровне объектов в памяти. Это не тот уровень.
источник