Size: a a a

2021 March 24

D

Danya in pro.cxx
Artem
А причём тут читаемость кода, если я спрашивал о возможностях С++?
О том, что вы хотите
1. Невозможного
2. Странного
3. Ненужного
источник

PZ

Pavel Zhigulin in pro.cxx
Побитый Кирпич
ренж это пара итераторов в одном объекте. Да, это нужно. Писать везде begin()/end() это бред
Идеологически мне идея нравится, я не спорю :) Я после доклада Кукича каждый раз был в состоянии: "блин, прикольно". Но реальность оказалась жестока. Та боль, которую несут ренжи существенно перевешивает боль от begin/end
источник

A

Artem in pro.cxx
Danya
О том, что вы хотите
1. Невозможного
2. Странного
3. Ненужного
А что странного? Задача остановить цикл мгновенно, что в ней такого?
источник

D

Danya in pro.cxx
Artem
А что странного? Задача остановить цикл мгновенно, что в ней такого?
Я даже не знаю как на это отвечать. "Остановить цикл мгновенно" — уже странно звучит :)
источник

A

Artem in pro.cxx
Danya
Я даже не знаю как на это отвечать. "Остановить цикл мгновенно" — уже странно звучит :)
Я тебя понял)
источник

MR

Maxim Rudik in pro.cxx
Antony Polukhin
Я бы пробовал следующее:
* Дебажный вывод, чтобы понять, оно вообще грузится или нет
* отладчик  - посмотреть где висит
Добрый вечер! После попытки отдебажить команду подключения плагина
clang -cc1 -load ./libcustom-checker-plugin.so
обнаружилась ошибка
../sysdeps/unix/sysv/linux/read.c: No such file or directory.
. Посмотрел в какой функции это всё происходит, команда
bt
выдала следующее. Что можно было бы предпринять?
источник

AP

Antony Polukhin in pro.cxx
Мне тут Андрей из команды подкинул решение по разделению диапазона по нескольким разделителям https://godbolt.org/z/TEE63zso4
источник

AP

Antony Polukhin in pro.cxx
Это утренняя задачка... я пытаюсь осознать, почему оно работает
источник

К

Константин in pro.cxx
Александр Караев
И всё взорвется при малейшем изменении на std::cout << "x = " << _1 << '\n', да?
А почему?
источник

К

Константин in pro.cxx
Побитый Кирпич
ренж это пара итераторов в одном объекте. Да, это нужно. Писать везде begin()/end() это бред
Ну можно всегда писать Ренжи самому
источник

CD

Constantine Drozdov in pro.cxx
Константин
А почему?
Думаю, код эквивалентен
std::cout << "x = ";
for_each(a.begin(), a.end(), std::cout << _1 << '\n');
источник

ПК

Побитый Кирпич... in pro.cxx
Константин
Ну можно всегда писать Ренжи самому
Надо чтобы все писали. Чтобы в библиотеках вместо пары итераторов принимался рендж
источник

CD

Constantine Drozdov in pro.cxx
Constantine Drozdov
Думаю, код эквивалентен
std::cout << "x = ";
for_each(a.begin(), a.end(), std::cout << _1 << '\n');
Это, скорее всего, можно исправить каким-нибудь фокусом в стиле (псевдокод)
_0(std::cout) << "x = " << _1 << '\n'
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Надо чтобы все писали. Чтобы в библиотеках вместо пары итераторов принимался рендж
Если что, Rust смеётся и говорит, что Iterator<T> надо просто называть функцию () -> optional<T>
источник

JJ

Joshua Jakowlew in pro.cxx
Доброй ночи, есть такой код
template <typename T>
concept Foo = requires(T t) {{ t.get() } -> std::convertible_to<void>; };

template <Foo T>
struct IFoo {};

struct FooImpl : IFoo<FooImpl>
{
   void get() {}
};

и он не компилируется,
error C7602: 'IFoo': the associated constraints are not satisfied
.

Я хочу, чтобы был какой-то концепт Foo, и базовая структура IFoo, от которой наследуется реализация, которая должна удовлетворять концепту Foo. В результате что-то типа интерфейса получается. Как мне это реализовать?
источник
2021 March 25

m

magras in pro.cxx
Красиво.
На сколько я понимаю, просто используется объект с кастомным оператором сравнения. А конструкция с single_view это вызов другой перегрузки, которая использует подстроку в качестве разделителя. Собственно та вариация split, которая принимает элемент тоже заворачивает его в single_view, но при этом перегрузка принимающая Pattern не требует чтобы Pattern содержал элементы того же типа, что строка, достаточно возможности сравнивать их между собой:
requires view<V> && view<Pattern> &&
            indirectly_­comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> &&
            (forward_­range<V> || tiny-range<Pattern>)

https://eel.is/c++draft/range.split.view
источник

m

magras in pro.cxx
Joshua Jakowlew
Доброй ночи, есть такой код
template <typename T>
concept Foo = requires(T t) {{ t.get() } -> std::convertible_to<void>; };

template <Foo T>
struct IFoo {};

struct FooImpl : IFoo<FooImpl>
{
   void get() {}
};

и он не компилируется,
error C7602: 'IFoo': the associated constraints are not satisfied
.

Я хочу, чтобы был какой-то концепт Foo, и базовая структура IFoo, от которой наследуется реализация, которая должна удовлетворять концепту Foo. В результате что-то типа интерфейса получается. Как мне это реализовать?
Я подозреваю что проблема в том что FooImpl это incomplete type в момент проверки концепта. Но я плохо знаю концепты и могу ошибаться.
источник

AP

Antony Polukhin in pro.cxx
magras
Красиво.
На сколько я понимаю, просто используется объект с кастомным оператором сравнения. А конструкция с single_view это вызов другой перегрузки, которая использует подстроку в качестве разделителя. Собственно та вариация split, которая принимает элемент тоже заворачивает его в single_view, но при этом перегрузка принимающая Pattern не требует чтобы Pattern содержал элементы того же типа, что строка, достаточно возможности сравнивать их между собой:
requires view<V> && view<Pattern> &&
            indirectly_­comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> &&
            (forward_­range<V> || tiny-range<Pattern>)

https://eel.is/c++draft/range.split.view
Угу, только там есть ещё неявное требование в ranges::equal_to https://en.cppreference.com/w/cpp/utility/functional/ranges/equal_to

Из-за этого приходится добавлять неявные конструкторы от чара. Сегодня спрошу у людей из комитета - это баг или фича
источник

AU

Abu Umar in pro.cxx
https://stackoverflow.com/a/9343465/8524139 это должно работать? godbolt говорит нет
https://godbolt.org/z/r4q51j7fh
В супе не ответили, пишу сюда.
источник

AP

Antony Polukhin in pro.cxx
Abu Umar
https://stackoverflow.com/a/9343465/8524139 это должно работать? godbolt говорит нет
https://godbolt.org/z/r4q51j7fh
В супе не ответили, пишу сюда.
А вот так вас устроит?

auto value = static_cast<std::underlying_type<FooEnum>::type>(myEnum);


Если нет, то надо менять static_cast на reinterpret_cast.
источник