Size: a a a

2020 August 27

AK

Andrei K in pro.cxx
Constantine Drozdov
У тебя, кажется, какое-то заблуждение вроде "сигнатура функции является формой её документации" в голове.
Это очень полезное заблуждение, и лучше бы, чтобы оно у всех было и все бы писали в соответствии с ним.
источник

CD

Constantine Drozdov in pro.cxx
Andrei K
Это очень полезное заблуждение, и лучше бы, чтобы оно у всех было и все бы писали в соответствии с ним.
Это тебе куда-то к суровым ФПшникам
источник

O

Ofee in pro.cxx
Constantine Drozdov
"ограничение на выход функции" это обязательство из документации, для языка оно вообще не имеет смысла
Я думаю, что программисты, не занимающиеся библиотечной разработкой и использующие шаблоны раз в пару лет, могли бы сказать ровно то же самое и о входных параметрах — им и auto в параметрах хватит.

Я думаю, здесь та же ситуация. Ошибки допускаются не только пользователем интерфейса, но и его разработчиком, поэтому проверка на то, что возвращаемый тип удовлетворяет некоторым ограничениям была бы однозначно не лишней
источник

CD

Constantine Drozdov in pro.cxx
Ofee
Я думаю, что программисты, не занимающиеся библиотечной разработкой и использующие шаблоны раз в пару лет, могли бы сказать ровно то же самое и о входных параметрах — им и auto в параметрах хватит.

Я думаю, здесь та же ситуация. Ошибки допускаются не только пользователем интерфейса, но и его разработчиком, поэтому проверка на то, что возвращаемый тип удовлетворяет некоторым ограничениям была бы однозначно не лишней
Так написал же, возвращаемый тип это не auto параметр, он вычисляется в точности. Получится конструкция ConvertibleToBool int foo()
источник

CD

Constantine Drozdov in pro.cxx
Что касается параметров - разок попробовать написать аналог Same<int> auto args... достаточно, чтобы понять, зачем это
источник

CD

Constantine Drozdov in pro.cxx
см. вот тут https://t.me/ProCxx/401590
источник

O

Ofee in pro.cxx
Constantine Drozdov
Так написал же, возвращаемый тип это не auto параметр, он вычисляется в точности. Получится конструкция ConvertibleToBool int foo()
Я думаю, имелась ввиду такая конструкция:
ConvertibleToBool auto foo(auto Callable callback, auto... args);
Просто проверка на то, что выведенный возвращаемый тип удовлетворяет набору ограничений
источник

O

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

Однако это действительно вызывает огромные вопросы на тему реализации этого и с этим я не спорю
источник

CD

Constantine Drozdov in pro.cxx
Ofee
Я думаю, имелась ввиду такая конструкция:
ConvertibleToBool auto foo(auto Callable callback, auto... args);
Просто проверка на то, что выведенный возвращаемый тип удовлетворяет набору ограничений
Это одно и то же
источник

CD

Constantine Drozdov in pro.cxx
foo(аргументы) возвращает конкретный тип, который будет выведен при инстанцировании
источник

CD

Constantine Drozdov in pro.cxx
Ofee
Я думаю, имелась ввиду такая конструкция:
ConvertibleToBool auto foo(auto Callable callback, auto... args);
Просто проверка на то, что выведенный возвращаемый тип удовлетворяет набору ограничений
хуже того, эта функция по сигнатуре отличается от
auto foo(auto Callable callback, auto... args);
это отныне другая функция настолько, что возможна перегрузка
источник

CD

Constantine Drozdov in pro.cxx
Ofee
Я думаю, имелась ввиду такая конструкция:
ConvertibleToBool auto foo(auto Callable callback, auto... args);
Просто проверка на то, что выведенный возвращаемый тип удовлетворяет набору ограничений
ConvertibleToBool auto foo(auto Callable callback, auto... args) { return std::vector<int>{42}; }
auto foo(auto Callable callback, auto... args) { return std::vector<int>{42}; }

ошибка разрешения перегрузки или нет?
источник

CD

Constantine Drozdov in pro.cxx
ConvertibleToBool auto foo(auto Callable callback, auto... args) { return 42; }
auto foo(auto Callable callback, auto... args) { return 42; }
источник

CD

Constantine Drozdov in pro.cxx
а вот это?
источник

D

Danya in pro.cxx
Constantine Drozdov
ConvertibleToBool auto foo(auto Callable callback, auto... args) { return std::vector<int>{42}; }
auto foo(auto Callable callback, auto... args) { return std::vector<int>{42}; }

ошибка разрешения перегрузки или нет?
auto и Callable местами надо поменять, но не суть
источник

CD

Constantine Drozdov in pro.cxx
угу
источник

O

Ofee in pro.cxx
Constantine Drozdov
ConvertibleToBool auto foo(auto Callable callback, auto... args) { return std::vector<int>{42}; }
auto foo(auto Callable callback, auto... args) { return std::vector<int>{42}; }

ошибка разрешения перегрузки или нет?
Я думаю, что да. Более того, чтобы это вообще хоть как-то работало, нужно пойти ещё дальше и потребовать, чтобы тело такой функции стало SFINAE-контекстом.

Однако, я и не спорю с тем, что непонятно, как это реализовывать в рамках языка, я рассуждаю на уровне абстрактной идеи "было бы неплохо, чтобы мы могли сделать дополнительные проверки над выведенным типом"
источник

CD

Constantine Drozdov in pro.cxx
Ofee
Я думаю, что да. Более того, чтобы это вообще хоть как-то работало, нужно пойти ещё дальше и потребовать, чтобы тело такой функции стало SFINAE-контекстом.

Однако, я и не спорю с тем, что непонятно, как это реализовывать в рамках языка, я рассуждаю на уровне абстрактной идеи "было бы неплохо, чтобы мы могли сделать дополнительные проверки над выведенным типом"
Почему "да"? Это что, был static_assert типа возвращаемого значения? Что не-SFINAE ошибка делает в сигнатуре?
источник

CD

Constantine Drozdov in pro.cxx
"было бы неплохо, чтобы мы могли сделать дополнительные проверки над выведенным типом" - верно, нужно только иметь инструмент автоматических доказательств, потому что это именно оно
источник

CD

Constantine Drozdov in pro.cxx
static_assert(forall<T>(std::is_convertible_to<bool>(foo(std::declval<T>())))
источник