Size: a a a

2020 August 14

АР

Андрей Руссков... in pro.cxx
Artur Solovev
Насколько "всегда есть"? Сделать (Foo*)nullptr->Bar() это UB?
p.s. (*this).Bar() =)
да
источник

АР

Андрей Руссков... in pro.cxx
начиная с с++11
источник

AN

Alexander N in pro.cxx
Можно вызвать наверное this на чем то невалидном
источник

AN

Alexander N in pro.cxx
Во кстати
Foo& Foo::bad() {
delete this;

return *this;
}
источник

CD

Constantine Drozdov in pro.cxx
Alexander N
Можно вызвать наверное this на чем то невалидном
С точки зрения языка, на невалидном вызывать ничего нельзя, так что this валидный
источник

CD

Constantine Drozdov in pro.cxx
Alexander N
Во кстати
Foo& Foo::bad() {
delete this;

return *this;
}
Ситуация не хуже, чем со ссылкой
источник

CD

Constantine Drozdov in pro.cxx
обычно формировать битые ссылки не стоит, но, увы, язык не запрещает (см. длинное обсуждение про формирование ссылки из nullptr)
источник

ST

Sergey Tarasov in pro.cxx
Всем привет! В boost mp11/fusion/hana есть что-нить вроде reverse_for_each ? Задача: нужен обратный цикл (итератор) по элементам std::tuple? В mp11 даже нет нормального for_each, в fusion и hana есть, но только прямой. Можно конечно по-старинке - сделать реверс из подобного:

template<size_t Index = 0, typename TTuple, size_t Size = std::tuple_size_v<std::remove_reference_t<TTuple>>,
        typename TCallable, typename... TArgs>
void for_each(TTuple &&tuple, TCallable &&callable, TArgs &&... args) {
 if constexpr (
Index < Size) {
   std::invoke(callable, args..., std::get<
Index>(tuple));

   if constexpr (
Index + 1 < Size) {
     for_each<
Index + 1>(std::forward<TTuple>(tuple), std::forward<TCallable>(callable), std::forward<TArgs>(args)...);
   }
 }
}


двигаясь в обратном направлении по индексу, но хотелось бы что-то готовое из буста...
источник

FZ

Fedya Zentsev in pro.cxx
Sergey Tarasov
Всем привет! В boost mp11/fusion/hana есть что-нить вроде reverse_for_each ? Задача: нужен обратный цикл (итератор) по элементам std::tuple? В mp11 даже нет нормального for_each, в fusion и hana есть, но только прямой. Можно конечно по-старинке - сделать реверс из подобного:

template<size_t Index = 0, typename TTuple, size_t Size = std::tuple_size_v<std::remove_reference_t<TTuple>>,
        typename TCallable, typename... TArgs>
void for_each(TTuple &&tuple, TCallable &&callable, TArgs &&... args) {
 if constexpr (
Index < Size) {
   std::invoke(callable, args..., std::get<
Index>(tuple));

   if constexpr (
Index + 1 < Size) {
     for_each<
Index + 1>(std::forward<TTuple>(tuple), std::forward<TCallable>(callable), std::forward<TArgs>(args)...);
   }
 }
}


двигаясь в обратном направлении по индексу, но хотелось бы что-то готовое из буста...
не буст, но кажется видел как бригандом делали что-то вроде
brigand::for_each<brigand::reverse<std::tuple<....>>>(...)
, можно посмотреть https://github.com/edouarda/brigand/
источник

FZ

Fedya Zentsev in pro.cxx
Sergey Tarasov
Всем привет! В boost mp11/fusion/hana есть что-нить вроде reverse_for_each ? Задача: нужен обратный цикл (итератор) по элементам std::tuple? В mp11 даже нет нормального for_each, в fusion и hana есть, но только прямой. Можно конечно по-старинке - сделать реверс из подобного:

template<size_t Index = 0, typename TTuple, size_t Size = std::tuple_size_v<std::remove_reference_t<TTuple>>,
        typename TCallable, typename... TArgs>
void for_each(TTuple &&tuple, TCallable &&callable, TArgs &&... args) {
 if constexpr (
Index < Size) {
   std::invoke(callable, args..., std::get<
Index>(tuple));

   if constexpr (
Index + 1 < Size) {
     for_each<
Index + 1>(std::forward<TTuple>(tuple), std::forward<TCallable>(callable), std::forward<TArgs>(args)...);
   }
 }
}


двигаясь в обратном направлении по индексу, но хотелось бы что-то готовое из буста...
а, пардон, не дочитал сообщение. по элементам же
источник

AN

Alexander N in pro.cxx
Constantine Drozdov
обычно формировать битые ссылки не стоит, но, увы, язык не запрещает (см. длинное обсуждение про формирование ссылки из nullptr)
Это хуже, чем nullptr. Я самоубился
источник

CD

Constantine Drozdov in pro.cxx
Alexander N
Это хуже, чем nullptr. Я самоубился
Тут нет ничего хуже, чем обычная ссылочная семантика
источник

AN

Alexander N in pro.cxx
Dangling reference получается
источник
2020 August 15

..

.D.U.Ż.Y. .D.Y.M. in pro.cxx
Привет всем. Такая ситуация. Мне нужно собирать модуль для апача, который принимает .o файл. Я собираю много .o из исходников с помощью Cmake типа вот такого:
add_library(router OBJECT ${PROJECT_SOURCE_DIR}/src/router/Router.cpp)
target_include_directories(router PUBLIC ${PROJECT_SOURCE_DIR}/lib/own)

А сборка объекта в makefile выглядит вот так:
Router.o : $(s_router)/Router.cpp $(i_router)/Router.h \
     g++ $(GCC_COMPILE) $(s_router)/Router.cpp

Вопросы: 1) после компиляции этот объект (.o) можно использовать для ручной линковки в Makefile'e (так нужно для того чтобы один большой .o файл поместить как параметр сборки для apxs сборки для апача) или там есть какая - то метаинфа о CMake и так делать нельзя?
2) они .o Cmake'а весят в 2-3 раза меньше если собирать руками  эти объекты. Почему так? Типа ручками получается:  11356 а Cmake выдает 2416 размера всех сгенереных объектов.
источник

AN

Alexander N in pro.cxx
.D.U.Ż.Y. .D.Y.M.
Привет всем. Такая ситуация. Мне нужно собирать модуль для апача, который принимает .o файл. Я собираю много .o из исходников с помощью Cmake типа вот такого:
add_library(router OBJECT ${PROJECT_SOURCE_DIR}/src/router/Router.cpp)
target_include_directories(router PUBLIC ${PROJECT_SOURCE_DIR}/lib/own)

А сборка объекта в makefile выглядит вот так:
Router.o : $(s_router)/Router.cpp $(i_router)/Router.h \
     g++ $(GCC_COMPILE) $(s_router)/Router.cpp

Вопросы: 1) после компиляции этот объект (.o) можно использовать для ручной линковки в Makefile'e (так нужно для того чтобы один большой .o файл поместить как параметр сборки для apxs сборки для апача) или там есть какая - то метаинфа о CMake и так делать нельзя?
2) они .o Cmake'а весят в 2-3 раза меньше если собирать руками  эти объекты. Почему так? Типа ручками получается:  11356 а Cmake выдает 2416 размера всех сгенереных объектов.
1. Можно ручками линковать
2. Разница в флагах?
источник

AN

Alexander N in pro.cxx
Можно сделать make VERBOSE=1 и видно будет что передаётся компилеру/линкеру на вход(у CMake)
источник

..

.D.U.Ż.Y. .D.Y.M. in pro.cxx
Различие во флагах есть, да
источник

IZ

Ilia Zviagin in pro.cxx
.D.U.Ż.Y. .D.Y.M.
Привет всем. Такая ситуация. Мне нужно собирать модуль для апача, который принимает .o файл. Я собираю много .o из исходников с помощью Cmake типа вот такого:
add_library(router OBJECT ${PROJECT_SOURCE_DIR}/src/router/Router.cpp)
target_include_directories(router PUBLIC ${PROJECT_SOURCE_DIR}/lib/own)

А сборка объекта в makefile выглядит вот так:
Router.o : $(s_router)/Router.cpp $(i_router)/Router.h \
     g++ $(GCC_COMPILE) $(s_router)/Router.cpp

Вопросы: 1) после компиляции этот объект (.o) можно использовать для ручной линковки в Makefile'e (так нужно для того чтобы один большой .o файл поместить как параметр сборки для apxs сборки для апача) или там есть какая - то метаинфа о CMake и так делать нельзя?
2) они .o Cmake'а весят в 2-3 раза меньше если собирать руками  эти объекты. Почему так? Типа ручками получается:  11356 а Cmake выдает 2416 размера всех сгенереных объектов.
Что-то для сборки модуля апача у тебя вопросы странные...
источник

AP

Antony Polukhin in pro.cxx
Новый Boost зарелизился https://www.boost.org/users/history/version_1_74_0.html

Из самого вкусного:
* ASIO ускорился и дополнительно оброс корутинами
* Atomic теперь умеет многое полезное из C++20 (например wait)
* MultiIndex научился выдавать пользователям ноды
источник

AP

Antony Polukhin in pro.cxx
Из забавного: Embarcadeo (бывший компилятор Borland) зашевелился и теперь шлёт патчи в Boost (последняя официально оттестированная на Boost версия Borland была ~40 релизов назад)
источник