Constantine
если std::addressof(control_block) == std::addressof(storage), он лежит там
Nikita
а не лучше ли std::aligned_union?
Constantine
?
Nikita
а ну да, тогда непонятно как детектить , была ли аллокация или нет
Constantine
угу, а 1 байт или 8 не решает
Constantine
пушо все равно отравняют
Constantine
технически можно наэкономить
Constantine
и хранить в последнем бите aligned_storage
Anatoliy
Constantine
Matwey
Господа
Matwey
А как себя ведет shared_from_this при множественном наследовании?
Matwey
Его надо виртуально наследовать?
Nikita
падажжи, а как ты собираешься его использовать при множественном наследовании
Александр
пришлось лезть в B и его наследовать
Matwey
Так std::enable_shared_from_this просто дописывает же поле с weak_ptr насколько я понимаю?
Matwey
хочу class C: public A, B
хранить С в shared_ptr
Matwey
и чтобы он кастился до shared_ptr на A и B
Matwey
Наверное придется сделать общую базу, да?
Nikita
тебе нужно чтобы C умел отдавать указатель на себя, только в виде shared_ptr<A> / shared_ptr<B>?
Matwey
Сейчас я точно скажу
B
господа, кто-нибудь сталкивался с таким:?
/usr/bin/ld: CMakeFiles/ed25519.dir/lib/ed25519/amd64-64-24k-pic/fe25519_mul.s.o: relocation R_X86_64_PC32 against symbol `crypto_sign_ed25519_amd64_64_38' can not be used when making a shared object; recompile with -fPIC
проект CMake, таргет создается через add_library(ed25519 SHARED <тут все .c и .s (asm) файлы>)
-fPIC точно есть при компиляции каждого отдельного файла, установлен через
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
B
гугл советует рекомпилить всё с -fPIC, но я специально посмотрел с make VERBOSE=1, абсолютно всё компилится с -fPIC
Constantine
Fox
Constantine
Matwey
https://wandbox.org/permlink/8vR1VIttEqtEECSZ
Matwey
Мне вот так нужно
Constantine
зачем если просто работает?
Constantine
struct A {};
struct B {};
Constantine
struct C : A, B, std::enable_shared_from_this<C> {
};
Constantine
будет каститься
Matwey
но из кишков A нельзя будет shared_from_this сделать
Constantine
а, хм
Constantine
надо чтобы A умел shared на себя при том, что он не шаред?)
Constantine
или
A : enable_shared_from_this<A>
B: enable_shared_from_this<B>
Matwey
ась?
Anatoly
ась?
зачем тебе shared_from_this в A?
Constantine
а, вы хотите множественно отнаследовать штуки, которые shared_from_this умеют?
Matwey
Да
Constantine
с виртуальным наследованием точно есть тонкости просто
Constantine
Да
а можно ВНЕЗАПНО XY зачем?
Constantine
т.е. я просто с трудом могу представить такую ситуацию
Constantine
у меня множественное наследование-то в коде в полутора местах
Ashot
Ashot
Ostap ꑭ
New wave
FailsBot
∧_∧
( ・ω・。)つ━☆・*。
⊂ ノ ・゜+.
しーJ °。+ *´¨)
.· ´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·'* ☆
🐼 Sild
что, это тоже в 21 стандарте будет компилиться?
Olesya
Olesya
https://www.youtube.com/channel/UCFPPiFWtjf-y7cnUsjSeWxw
Olesya
вот собсна канал и там даже первые лекции есть
Matwey
Ostap ꑭ
Zen of C++
Nikita
Ребят, использую GTest, при написании ASSERT_EQ :
ASSERT_EQ(stream::Stream(Gen()) | map([](auto &&v){ return v * v; }) | nth(0), 21 * 21);Вываливается ошибка компиляции, жалуется на лямбду
lambda expression in an unevaluated operandА если написать ASSERT_THAT
ASSERT_THAT(stream::Stream(Gen()) | map([](auto &&v){ return v * v; }) | nth(0), 21 * 21);То всё замечательно работает.
Есть ли семантическая разница для простого сравнения значений между ASSERT_EQ и ASSERT_THAT? Если нет, то нафиг нужен ASSERT_EQ?
Vladislav
Nikita
хм, ну тест нормально выполняется и проходит, причём если 21 * 21 заменить на другое значение то тест фейлится
Nikita
(как и должно быть, разумеется)
Vladislav
загадочно
Vladislav
из документации: Asserts that value matches matcher
Vladislav
а матчеры бывают встроенные либо определяются через MATCHER(...)
Nikita
мож есть какой то дефолтный для интов
Vladislav
а stream это вот эти? http://jscheiny.github.io/Streams/
Nikita
не
Nikita
это мои
Nikita
ещё прикол в том, что если лямбду передать по lvalue ссылке, то всё работает и с ASSERT_EQ
Nikita
а ошибка про lambda expression in an unevaluated operand вываливается одна и та же что в gcc что в clang
Nikita
так что на багу компилятора непохоже
Nikita
лямбда вызовется
Nikita
сама по себе
Alexander
Ребят, использую GTest, при написании ASSERT_EQ :
ASSERT_EQ(stream::Stream(Gen()) | map([](auto &&v){ return v * v; }) | nth(0), 21 * 21);Вываливается ошибка компиляции, жалуется на лямбду
lambda expression in an unevaluated operandА если написать ASSERT_THAT
ASSERT_THAT(stream::Stream(Gen()) | map([](auto &&v){ return v * v; }) | nth(0), 21 * 21);То всё замечательно работает.
Есть ли семантическая разница для простого сравнения значений между ASSERT_EQ и ASSERT_THAT? Если нет, то нафиг нужен ASSERT_EQ?
я читал где-то, что в целом - все эти GE, EQ, NE, TRUE варианты ASSERT и EXPECT это изначальные варианты. Потом добавлится ASSERT_THAT и в целом все точно так же можно выразить в матчерах
Nikita
Хм, спасибо
Vitaliy
Начал копать в сторону имплементации pImpl и наткнулся на то, что на cpp_reference предлагают его оборачивать в propagate_const, пропосал на который есть, но последний раз рассматривался 3 года назад. В бусте такой штуковины не нашёл. Кто-нибудь в курсе вообще что там с этой штукой происходит ? )
Alexander
https://github.com/jbcoe/propagate_const репа автора если что
Alexander
в exprerimental gcc уже должен быть
Vitaliy
Vitaliy
Но что толку от репы, если кажется, что там всё затухло)