Question: Why do I get a very long compile error when I define more than 20 rows in the transition table?
Answer: MSM uses Boost.MPL under the hood and this is the default maximum size. Please define the following 3 macros before including any MSM headers:
```
Создаю asio::io_service, передаю его как reference вниз классу, который на нем открывает socket.
При разрушении всей этой хуйни разрушается io_service, а потом пытается разрушиться socket и радостно вычитвает данные по освобожденной памяти.
Это буст говно или я тупой и так делать нельзя? Ведь не спроста в basic_datagram_socket в конструкторе io_service передается не по const ref, а по обычному?
==2865==ERROR: AddressSanitizer: heap-use-after-free on address 0x604000535538 at pc 0x560b6cf18d1b bp 0x7ffce4792370 sp 0x7ffce4792368
READ of size 8 at 0x604000535538 thread T0
#0 0x560b6cf18d1a in boost::asio::detail::reactive_socket_service_base::destroy(boost::asio::detail::reactive_socket_service_base::base_implementation_type&) /usr/include/boost/asio/deta
il/impl/reactive_socket_service_base.ipp:87
#1 0x560b6cf1f330 in boost::asio::datagram_socket_service<boost::asio::ip::udp>::destroy(boost::asio::detail::reactive_socket_service<boost::asio::ip::udp>::implementation_type&) /usr/in
clude/boost/asio/datagram_socket_service.hpp:138
#2 0x560b6cf1f0d5 in boost::asio::basic_io_object<boost::asio::datagram_socket_service<boost::asio::ip::udp>, true>::~basic_io_object() /usr/include/boost/asio/basic_io_object.hpp:197
#3 0x560b6cf1de95 in boost::asio::basic_socket<boost::asio::ip::udp, boost::asio::datagram_socket_service<boost::asio::ip::udp> >::~basic_socket() /usr/include/boost/asio/basic_socket.hp
p:1512
#4 0x560b6cf1cfab in boost::asio::basic_datagram_socket<boost::asio::ip::udp, boost::asio::datagram_socket_service<boost::asio::ip::udp> >::~basic_datagram_socket() /usr/include/boost/as
io/basic_datagram_socket.hpp:43
0x604000535538 is located 40 bytes inside of 48-byte region [0x604000535510,0x604000535540)
freed by thread T0 here:
#0 0x7fcfdc9d21f0 in operator delete(void*) (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc31f0)
#1 0x560b6cf26daf in boost::asio::datagram_socket_service<boost::asio::ip::udp>::~datagram_socket_service() /usr/include/boost/asio/datagram_socket_service.hpp:40
#2 0x560b6cf149fa in boost::asio::detail::service_registry::destroy(boost::asio::io_service::service*) /usr/include/boost/asio/detail/impl/service_registry.ipp:101
#3 0x560b6cf1493a in boost::asio::detail::service_registry::~service_registry() /usr/include/boost/asio/detail/impl/service_registry.ipp:45
#4 0x560b6cf17963 in boost::asio::io_service::~io_service() /usr/include/boost/asio/impl/io_service.ipp:53
cmake . -DCMAKE_EXPORT_COMPILE_COMMANDS=1
bear make
rc -J .
в каталоге с compile_commands.jsonНаслаждаемся несосущей навигацией по плюсовому проекту из любимого редактора.
Вот тут кто-то [наговнил] либу для параллелизма для Rust:
let total_price = stores.par_iter()
.map(|store| store.compute_price(&list))
.sum()
Конечно мало сделать параллелизм простым, его надо сделать ещё и безопасным. Rayon гарантирует, что использование его API никогда не приведёт к гонке данных.
Мне вот интересно, неужели в rust нет способа захватить ref на Weak Box и таким образом выстрелить себе в ногу (ну или организовать race condition).
Не слишком ли громкое заявление?
Олсо, реквестирую подобных либ для плюсцов.
Между json и boost::serialization выбрал glib-овский GVariant.
Такие дела.
Хочу анафорический if, который бы делал коньюнкция между операндами и возвращал первый сфейлившийся, плюс который бы анафорично захватывал все значения из операндов
Вот, например:
bool result =
a_if_and<boost::variant<T>, boost::none> (
{msg.getString(v[1]), msg.getString(v[2]), msg.getString(v[3]), msg.getString(v[4])},
// at least one operand == boost::none
[&](unisgned int first_null, const std::tuple<boost::variant<T>, boost::variant<T>, ...> &evalValues) {
std::cerr << "value " << first_null "is bad" << std::endl;
return false;
},
// otherwise
[&](const std::tuple<boost::variant<T>, boost::variant<T>, ...> &evalValues) {
std::cout << "value 0 =" << evalValues.get(0).get<T> << std::endl;
std::cout << "value 1 =" << evalValues.get(1).get<T> << std::endl;
// ...
return true;
});
То есть, a_if_end eval-ит аргументы и каждый на неравенство boost::none.
И в зависимости от этого дергает мою лямбдочку.
Что есть чо похожее? Или я слишком охуел?
Пожрал говна с boost::serializationterminate called after throwing an instance of 'boost::archive::archive_exception'
what(): unregistered void cast 11MediaSetMsg<-20IndicationMsgPayload
Есть чо полущ чтобы перекинуть структурку со строками между двумя процессами?
Плюсбоги, спалите когда pimpl идиом не подходит?
(кроме очевидных кейсов когда прибавляет а не уменьшает сложность)