Alexey
Запрещать, или выключать? Или полагаться на дефолт компиляторный? А какого компилятора дефолт? А если включать, то вот вообще все варнинги для всех компиляторов?
Vsevolod
нужны чоткие правила статического анализа
Alexander "SonnySlave"
хм, просто встраивается в ci и всё
Alexander "SonnySlave"
каждую ночь рассылается blame list тем, кто шакодил
Alexander "SonnySlave"
если за собой не подтирает шкодник - ругать
Alexander "SonnySlave"
всё уже давно придумано за нас
Samat
А современные компиляторы оптимизируют push_back в emplace_back, там, где это можно?
Alexander
А если либа генерирует кучу варнингов на gcc 4.2
Alexander
Левая
Vsevolod
-Wduplicated-cond - вот такое или -Wnull-dereference такое, помогают
Vsevolod
уфф
Alexander "SonnySlave"
Alexey
Да? То есть напрмер вот такое надо оставлять без варнинга?
int foo(int a, int b) {
auto res = a+b;
}
Vsevolod
ну вот есть у меня юзеры с openbsd
Alexander "SonnySlave"
так как от тебя это не сильно зависит
Vsevolod
и много
Vsevolod
еще есть несколько людей с соляркой
Alexander
Gtest генерирует, но переезжать уже дорого ибо легаси
Vsevolod
и с армом/мипсом
Alexander
На платежных терминалах до сих пор компиляторы есть gcc 4.2, 4.3
Alexander
Armv5 ядро
Alexey
Alexander
Буст 1.64 собирается без корутин и процесс 😅
Pavel
https://godbolt.org/g/Fi6REC
Pavel
уже видели?
Matwey
Oleg
Народ, есть такая задачка: n shared_ptr хранятся в контейнер. У них нужно вызвать один метод и получить ответ через событие. Ответ может прийти как синхронно, так и асинхронно. По ответу нужно удалить шаредптр. Как это красиво реализовать, а то у меня пока получается только через копию контейнера
Alexander
Но это же старье
Ага, но оборудование выпускают. Там ещё 64 мб озу и 64 мб флешка. Даж линукс тянет.
Александр
Oleg
такие существуют?
Oleg
// у меня мапка
Александр
мапка нормально удаляет
Alexander
Но это же старье
Curl SQLite OpenSSL собирается, жить можно. Даже в телеграмм бота можно слать приветы)
Oleg
Александр
Александр
во время итерирования по контейнеру нужно его изменять что ли?
Александр
for (auto it = m.begin(); it != m.end(); ) { if (some_cond) it = m.erase(it); else ++it; }
Vsevolod
у всех контейнеров есть гарантии на валидность итераторов в разных случаях
Vsevolod
std::list и std::map вполне себе валидны при удалении элементов
Vsevolod
unordered/vector - нет
Oleg
как тут код постить?
Oleg
https://bpaste.net/show/24d227cf5dd5
Vsevolod
ну и вообще для таких целей я бы использовал weak_ptr в контейнере, а потом бы его чистил периодически
Oleg
во тк выглядит ситуация. Пробюлема в том, что OnStopped может быть вызван как синхронно, так и асинхронно
Oleg
Nik
Мне кажется, или "функция может быть вызвана асинхронно" уже подразумевает многопоточность?
Egor
Александр
В таком случае можно помечать элементы удаленными, а потом отдельно удалять из контейнера
Egor
А можно просто при итерировании сначала делать ++, а потом вызывать Stop.
Egor
Если есть гарантия, что следующий элемент не будет удалён — то ок.
kitsu
Nik
void foo() {
for(int i = 0; i < 10; i++)
yield someStuff(i);
}
}
Если под корутинами подразумевается что-то такое, то, афак, вызов foo() будет блокирующим, т.е. не асинхронным
Oleg
Oleg
Там асинхронно работает механизм rabbit, но само приложение синхронное.
Oleg
Oleg
tempIt = it++;
tempIt->Stop()
?
Egor
Egor
Если мы знаем, что tempit гарантированно не будет удалён при вызове Stop
Pepe 🐸
Ignat
я думал, наш 4.7.2 — говно мамонта, а у людей, оказывается, и 4.2 бывает...
Vladislav
ждем людей, жалующихся на msvc6
Maxim
У меня есть сборка на 4.0.1
Maxim
Для обратной совместмости. И язык не выше с++11
Igor
Vsevolod
В 4.0 не было c++11
Berkus
Alexey
Oleg
Berkus