MrSmith
error: no matching function for call to ‘node::sendMessage(<brace-enclosed initializer list>, int)’
(*nw.clusster[0].get()).sendMessage({12},12);
MrSmith
а азачем меня звал? 😊
Там чувак в видосе рассказывал про трейты (ну скажем так знаменитый чел, в комитете нас представляет и писал либу на шлабонной магии для рефлексии pod) он сказал мол алгоритмы буста норм либа все юзают пишут лучшие программисты. Позвал чтоб ты оценил что заслуги ваши перед сообществом оценили даже в Я
MrSmith
void sendMessage(std::variant<castingPolicies,std::initializer_list<GUID>> resiver, data d);
MrSmith
Хз наверное я костыль делаю
MrSmith
И проще перегрузкой
Alexander "SonnySlave"
Alexander "SonnySlave"
нонейм какой-то
Alexander "SonnySlave"
он точно норамальные вещи толкает? а то я знаю таких - понасоветуют вского разного, а потом от таких советов только отучивать приходится
Alexander "SonnySlave"
только вот процесс отучивания намного сложнее, потому что советчику то верят с чего-то, а тебе нет
MrSmith
MrSmith
Ну может и ноунейм но на кометете один из чуваков, он толкнул к примеру много чего в variant
MrSmith
Есть конечно способ решить все двумя перегрузками, одну сделать вариадик другую православной но интересно разве нельзя делать функцию с несколькими инит листами
Alexander "SonnySlave"
Полухин
ну погуглил я его - среднестатистический бездельник с комитета
Saphire
...гм
Saphire
Кепка не взлетела
Alexander "SonnySlave"
Alexander "SonnySlave"
мб я просто найти не могу
MrSmith
MrSmith
Ну собственно я вот это смотрел
MrSmith
ну погуглил я его - среднестатистический бездельник с комитета
Ну я тоже не в восторге от того как работает комитет GCC и прочее но не могу кинуться и резко сделать этот мир лучше. Ибо это титаническая задачка, может компиль и за месяц-два можно написать но явно не настолько оптимальный и крутой какой есть сегодня в gcc или шланге хотя конено интересный елендж
Alexander "SonnySlave"
Alexander "SonnySlave"
и это yet another reflection library
MrSmith
Ладно разочаровал меня пойду дальше ничего не делать
Alexander "SonnySlave"
Saphire
Openssl не тот видимо стоит у меня/в конане
MrSmith
ну сорри. я просто открыл тебе чуток глазки
Ну хз я к примеру написал на си лямбды и видел кучу чуваков с интересными проектами, не думал что чуваки из яндекса могут пиздить и читать доклады этом прям вообще дно
Alexander "SonnySlave"
Alexander "SonnySlave"
и самое главное, что просто хайпятся на этом
MrSmith
Ну яндекс сам по себе дно если на то пошло, только тсс
Andrei
Что за хрень тут происходит прямо сейчас?
Alexander "SonnySlave"
Andrei
D:
Alexander "SonnySlave"
Andrei
ну погуглил я его - среднестатистический бездельник с комитета
Alexander "SonnySlave"
MrSmith
Смотрел про YT это вообще норма? Слизали Raft почти что наговорили по много умных слов а по сути нифига
Saphire
Anonymous
MrSmith
sendMessage(std::initializer_list<int>{12},12)
MrSmith
Вот так работает
MrSmith
Это баг Gcc или так и задуманно?
MrSmith
Есть у кого шланг под рукой?
Anonymous
Gcc.godbolt.org?
Anonymous
стандарт какой?
MrSmith
Я пытался крч
MrSmith
с++ 17
Anonymous
Даже не смотря на код, скорей всего ты нарвался на это http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html
MrSmith
MrSmith
MrSmith
Можно конечно auto tmp = {}; (tmp, data); Но вдруг это не единственный вариант
Anonymous
А нафига тебе там нужен был std::variant?
MrSmith
Одно определяется enum - другое лист
MrSmith
Я бы мог сделать перегрузку - но в таком случае я бы не смог в рантайме определить и пришлось бы высовывать ифы тоесть размывать логику за функцию или городить еще какой паровоз. Ну если придумаешь решение лучше я конечно же исправлю свой говнокод
Anonymous
типа такого https://godbolt.org/g/grurSb ?
Anonymous
Это этого тоже попахивает (о чем clang радостно сообщает). Оно скорее задает направление дальнейших размышлений
Anonymous
кстати, ты не можешь иметь std::initializer_list в качестве настоящего типа. Нельзя написать std::variant<std::initializer_list<int» или std::vector<std::initializer_list<int» и т.д. Это не настоящий тип, он существует только на этапе компиляции и за ним нет контейнера, где бы хранились данные в рантайме
Vladislav
Anonymous
хм, где это написано?
Ok, это поменяли в c++14 и добавили больше конкретики. В c++11 это было так: The underlying array is not guaranteed to exist after the lifetime of the original initializer list object has ended. The storage for std::initializer_list is unspecified (i.e. it could be automatic, temporary, or static read-only memory, depending on the situation).
Vladislav
Vladislav
другое дело что любой шаг влево/вправо от стандартного юзкейса легко выстрелит в ногу шальным UB
Anonymous
Ну вот эта фраза "The underlying array is not guaranteed to exist after the lifetime of the original initializer list object has ended" мной читается так:
При std::vector<std::initializer_list<int» v; v.push_back({12,13});
original initilizer list object здесь {12,13} и его вермя жизни до последней ;. Что помещается в вектор - х.з.
Anonymous
Не зря это уточнили в C++14
MrSmith
Хз норм идея в с++ есть и стэковые типы правда из коробки только один достаточно гибкий
MrSmith
Зато специализаций куча константных но все же я бы сделал еще пару но так как это н так просто то не буду
Anonymous
Кстати об уточнении из c++14. Если я правильно понял, то запихать initializer_list в вектор будет равносильно этому: https://godbolt.org/g/NoFYXv
Vladislav
Anonymous
Именно. Вот фраза из C++14: The underlying array is a temporary array of type const T[N], in which each element is copy-initialized (except that narrowing conversions are invalid) from the corresponding element of the original initializer list. The lifetime of the underlying array is the same as any other temporary object, except that initializing an initializer_list object from the array extends the lifetime of the array exactly like binding a reference to a temporary (with the same exceptions, such as for initializing a non-static class member). The underlying array may be allocated in read-only memory.
Vladislav
но это не то же самое что "не настоящий тип" - скорее, "тип с наркоманской семантикой"
MrSmith