Size: a a a

2021 February 23

D

Dmitriy in pro.cxx
Что-то не только у @quelty развлекуха с исключениями.
Задачка на ночь.
Есть код
template <class Exc, class... Types>
[[noreturn]] __declspec(noinline) void throw_exception(Types&&... args) {
 throw Exc(forward<Types>(args)...);
}

template <class Exc, class Ty, class... Types>
static void throw_exception_if_not(const Ty& cond, Types&&... args) {
 if (!cond) {
   throw_exception<Exc>(forward<Types>(args)...);
 }
}

В некоторой функции после вызова throw_exception_if_not<runtime_error>(some_pointer) падаем в __GSHandlerCheck
Просто запихнутый туда throw runtime_error{""}, конечно, отрабатывает
Что могло пойти не так?
источник

FS

Flower Surgeon in pro.cxx
Dmitriy
Что-то не только у @quelty развлекуха с исключениями.
Задачка на ночь.
Есть код
template <class Exc, class... Types>
[[noreturn]] __declspec(noinline) void throw_exception(Types&&... args) {
 throw Exc(forward<Types>(args)...);
}

template <class Exc, class Ty, class... Types>
static void throw_exception_if_not(const Ty& cond, Types&&... args) {
 if (!cond) {
   throw_exception<Exc>(forward<Types>(args)...);
 }
}

В некоторой функции после вызова throw_exception_if_not<runtime_error>(some_pointer) падаем в __GSHandlerCheck
Просто запихнутый туда throw runtime_error{""}, конечно, отрабатывает
Что могло пойти не так?
Зачем noreturn?
источник

D

Dmitriy in pro.cxx
Flower Surgeon
Зачем noreturn?
А как она return?
источник

D

Dmitriy in pro.cxx
Проблема не в этом. Точно.
источник

FS

Flower Surgeon in pro.cxx
Как мне кажется, ты написал что-то сложное, перегруженное и ненужное.
источник

D

Dmitriy in pro.cxx
Flower Surgeon
Как мне кажется, ты написал что-то сложное, перегруженное и ненужное.
Окей.
Я просто скажу, что
if(some_ptr) {
   throw runtime_error{""};
}

тоже упало
источник

FS

Flower Surgeon in pro.cxx
Dmitriy
Окей.
Я просто скажу, что
if(some_ptr) {
   throw runtime_error{""};
}

тоже упало
А ты его поймал?
источник

D

Dmitriy in pro.cxx
Вопросов стало больше, глаза можно натягивать на глобус.
Первый и главный: а разве при наличии в функции исключений MSVC юзает __GSHandlerCheck?
Почему не __GSHandlerCheck_EH*?
источник

D

Dmitriy in pro.cxx
Flower Surgeon
А ты его поймал?
Упало ДО catch
источник

D

Dmitriy in pro.cxx
Там цепочка __CxxThrowException -> __cxx_dispatch_exception -> некие внутренние CRT-шные обработчики
источник

V

Valerie in pro.cxx
Доброго времени суток! Нужен совет/направление, может кто-то подскажет. В проекте на C++/Objective-C с Qt framework переписать тесты на Catch2, когда добавляю новый тест в одну из либ проекта вылезают Linker errors не связанные с хедерами и кодом, которые включаю в тест, эти errors все одного плана - undefined symbols for x64_86 и указывают на .mm файлы, символы из Cocoa. Вопрос: нужно добавлять в target_link_libraries фреймворки Cocoa? Или что-то с dependency нашего проекта/либы?
источник

V

Valerie in pro.cxx
*в target_link_libraries теста, не проекта. Именно тест не линкуется
источник

D

Danya in pro.cxx
https://herbsutter.com/2021/02/22/trip-report-winter-2021-iso-c-standards-meeting-virtual
Герб Саттер выложил очередной trip report
Мне показалось интересной та часть, где они "подошли близко" к тому, чтобы сделать функции из math.h — constexpr
источник

AZ

Alexander Zaitsev in pro.cxx
Danya
https://herbsutter.com/2021/02/22/trip-report-winter-2021-iso-c-standards-meeting-virtual
Герб Саттер выложил очередной trip report
Мне показалось интересной та часть, где они "подошли близко" к тому, чтобы сделать функции из math.h — constexpr
правда действительно непонятно, что решат делать с errno
источник

V

Valerie in pro.cxx
Valerie
Доброго времени суток! Нужен совет/направление, может кто-то подскажет. В проекте на C++/Objective-C с Qt framework переписать тесты на Catch2, когда добавляю новый тест в одну из либ проекта вылезают Linker errors не связанные с хедерами и кодом, которые включаю в тест, эти errors все одного плана - undefined symbols for x64_86 и указывают на .mm файлы, символы из Cocoa. Вопрос: нужно добавлять в target_link_libraries фреймворки Cocoa? Или что-то с dependency нашего проекта/либы?
Проблема была в другой либе, которая не линковала к Cocoa frameworks, вопрос снят)
источник

АВ

Александр Водянников... in pro.cxx
Не в тему чата, но - ВСЕХ МУЖИКОВ с праздником !!!
источник

ИI

И Ivan in pro.cxx
Danya
https://herbsutter.com/2021/02/22/trip-report-winter-2021-iso-c-standards-meeting-virtual
Герб Саттер выложил очередной trip report
Мне показалось интересной та часть, где они "подошли близко" к тому, чтобы сделать функции из math.h — constexpr
А в чем вообще смысл constecpr функций? Мне кажется, у него только одно направление - потешить себя. А вычислить что-то до начала выполнения программы можно и  в runtime, это и гибче (данные можно хоть из файла считать) и понятнее
источник

AS

Alex Sandrov in pro.cxx
Александр Водянников
Не в тему чата, но - ВСЕХ МУЖИКОВ с праздником !!!
Надо проявить фантазию и прикрутить 23-е к с++, чтобы было в тему чата же 😐
источник

AP

Antony Polukhin in pro.cxx
Dmitriy
Пусть где-то объявлен и определён класс MyClass.
Приложение A создает объект этого класса и записывает в shared-память указатель на него и указатели на все методы.
Является ли чем-то нехорошим с точки зрения Стандарта вызов этих методов по указателю из приложения B?
Вы не можете перекидываться указателями через общую память, вам нужны смещения относительно начала шареного сегмента до объекта лежащего в этом сегоменте. См https://www.boost.org/doc/libs/1_75_0/doc/html/interprocess/offset_ptr.html или рецепт "Использование указателей в общей памяти" из одной русской книги по Boost
источник

O

Ofee in pro.cxx
И Ivan
А в чем вообще смысл constecpr функций? Мне кажется, у него только одно направление - потешить себя. А вычислить что-то до начала выполнения программы можно и  в runtime, это и гибче (данные можно хоть из файла считать) и понятнее
Результат не constexpr функции не засунуть в качестве шаблонного аргумента

Но вообще, согласен, сейчас зима – полезно погреть комнату пользователя, а шаблоны тут не не нужны – мы пишем только оригинальный код
источник