Size: a a a

Rust — русскоговорящее сообщество

2021 March 31

IZ

Ilia Zviagin in Rust — русскоговорящее сообщество
Valentin Kornienko
Или они кланг смогли на стероидах запустить?
Говорят, смогли.
источник

MI

Mischa I in Rust — русскоговорящее сообщество
Valentin Kornienko
Или они кланг смогли на стероидах запустить?
++
источник

MI

Mischa I in Rust — русскоговорящее сообщество
всем спасибо за помощь
источник

_

__gg in Rust — русскоговорящее сообщество
Добрый день.
Столкнулся с проблемой наследования от basic_streambuf.

Имею следующий код:
template<typename char_type, typename traits_type = char_traits<char_type>>
class custom_buf: public basic_streambuf<char_type, traits_type>
{
...
public:
 virtual int_type overflow(int_type c = traits_type::eof()) override;
};

template<typename char_type, typename traits_type>
custom_buf<char_type, traits_type>::int_type
custom_buf<char_type, traits_type>::overflow(int_type c)
{
 /* other code */
 ptrdiff_t sz = pptr() - pbase(); // Error: pptr() is undefined, pbase() is too.
}

Из-за чего может возникать такая ошибка? Наследуюсь, насколько я понимаю, правильно; посмотрел реализацию в самом basic_streambuf<...>::pptr(), тоже все верно, то есть ничего переопределять не нужно.
источник

AS

Anatoly Shirokov in Rust — русскоговорящее сообщество
__gg
Добрый день.
Столкнулся с проблемой наследования от basic_streambuf.

Имею следующий код:
template<typename char_type, typename traits_type = char_traits<char_type>>
class custom_buf: public basic_streambuf<char_type, traits_type>
{
...
public:
 virtual int_type overflow(int_type c = traits_type::eof()) override;
};

template<typename char_type, typename traits_type>
custom_buf<char_type, traits_type>::int_type
custom_buf<char_type, traits_type>::overflow(int_type c)
{
 /* other code */
 ptrdiff_t sz = pptr() - pbase(); // Error: pptr() is undefined, pbase() is too.
}

Из-за чего может возникать такая ошибка? Наследуюсь, насколько я понимаю, правильно; посмотрел реализацию в самом basic_streambuf<...>::pptr(), тоже все верно, то есть ничего переопределять не нужно.
введи зависимости от типа шаблона this->pptr() - this->pbase() при поиске имен
источник

_

__gg in Rust — русскоговорящее сообщество
Помогли. Спасибо :)
источник

DS

Dmitry Sokolov in Rust — русскоговорящее сообщество
Интересно, почему нельзя было без ranges добавить всякие std::find(Iterable,T)?
источник

AP

Antony Polukhin in Rust — русскоговорящее сообщество
Dmitry Sokolov
Интересно, почему нельзя было без ranges добавить всякие std::find(Iterable,T)?
А что такое Iterable? Должен ли у него быть default конструктор? Какие требования к сложности операций над ним?

Если всё это расписать, то получится десяток концептов и пяток улучшений... Сделав которые получим Ranges
источник

D

Danya in Rust — русскоговорящее сообщество
Antony Polukhin
А что такое Iterable? Должен ли у него быть default конструктор? Какие требования к сложности операций над ним?

Если всё это расписать, то получится десяток концептов и пяток улучшений... Сделав которые получим Ranges
Может ещё вопрос был в том, а нельзя это было без дополнительного неймспейса сделать?
источник

DS

Dmitry Sokolov in Rust — русскоговорящее сообщество
Antony Polukhin
А что такое Iterable? Должен ли у него быть default конструктор? Какие требования к сложности операций над ним?

Если всё это расписать, то получится десяток концептов и пяток улучшений... Сделав которые получим Ranges
То для чего begin(x), end(x) даёт InputIterator наверное с учётом ADL.
источник

АР

Андрей Руссков... in Rust — русскоговорящее сообщество
Dmitry Sokolov
Интересно, почему нельзя было без ranges добавить всякие std::find(Iterable,T)?
берем std::map...
источник

PZ

Pavel Zhigulin in Rust — русскоговорящее сообщество
У меня тут вопрос - это UB или не UB
https://wandbox.org/permlink/8e2w5Bn9IwUqVJPm
источник

PZ

Pavel Zhigulin in Rust — русскоговорящее сообщество
Вроде всё нормально, но почему-то мне страшно)
источник

DS

Dmitry Sokolov in Rust — русскоговорящее сообщество
Андрей Руссков
берем std::map...
Ну так и что, никто ж не мешает сделать find(m.begin(), m.end(), x);
источник

АР

Андрей Руссков... in Rust — русскоговорящее сообщество
Dmitry Sokolov
Ну так и что, никто ж не мешает сделать find(m.begin(), m.end(), x);
я бы предпочел чтобы find(m, key) резолвился в m.find(key), а не в find(m.begin(), m.end(), key)
источник

DS

Dmitry Sokolov in Rust — русскоговорящее сообщество
Андрей Руссков
я бы предпочел чтобы find(m, key) резолвился в m.find(key), а не в find(m.begin(), m.end(), key)
Ну эт уже внутри можно при желании разрулить через if constexpr (has_find)
источник

IZ

Ilia Zviagin in Rust — русскоговорящее сообщество
Dmitry Sokolov
Интересно, почему нельзя было без ranges добавить всякие std::find(Iterable,T)?
Вообще Ranges делают STL наконец концептуально правильной вещью, все эти долбаные итераторы наконец уходят в прошлое.

Так что что тебе не нравится, не понятно.
источник

SS

Sergey Skvortsov in Rust — русскоговорящее сообщество
источник

PZ

Pavel Zhigulin in Rust — русскоговорящее сообщество
Ilia Zviagin
Вообще Ranges делают STL наконец концептуально правильной вещью, все эти долбаные итераторы наконец уходят в прошлое.

Так что что тебе не нравится, не понятно.
Ну, например сложность ошибок компилятора при использовании Ranges. Антот тут буквально на днях скидывал простейший пример, в котором чёрт голову сломит.
Неочевидная работа "адаптеров".
Полная невозможность понять где именно в цепочке вычислений что-то пошло не так.
Ленивость ренджей. Это их же и плюс, но может приводить просто к катастрофическим усложениям при поиске прочины очередного SEGFAULT
Долгая компиляция :)

Ну и моё персональное - std::iota. Это самое тупое название в истории))
источник

IZ

Ilia Zviagin in Rust — русскоговорящее сообщество
Pavel Zhigulin
Ну, например сложность ошибок компилятора при использовании Ranges. Антот тут буквально на днях скидывал простейший пример, в котором чёрт голову сломит.
Неочевидная работа "адаптеров".
Полная невозможность понять где именно в цепочке вычислений что-то пошло не так.
Ленивость ренджей. Это их же и плюс, но может приводить просто к катастрофическим усложениям при поиске прочины очередного SEGFAULT
Долгая компиляция :)

Ну и моё персональное - std::iota. Это самое тупое название в истории))
Подтянется это всё...
источник