3 ms·
jfc... Can you give more info how did you learn this and to which lib implementation this applies?
by Arech 2y ago
jfc... Can you give more info how did you learn this and to which lib implementation this applies?
- tsimionescu 2y agoWell, given that qsort and bsearch take a function pointer and call it, that function pointer can easily point to a function that throws. So I think this applies to all implementations of qsort and bsearch. Especially since there is no way to mark a function pointer as noexcept.
- leni536 2y ago> Especially since there is no way to mark a function pointer as noexcept. There is, noexcept is part of the type since C++17. In fact, I prefer noexcept function pointer parameters for C library wrappers, as I don't expect most libraries written in C to deal with stack unwinding at all.
- tsimionescu 2y agoOops, you're right, I hadn't checked that this had changed in C++ 17.
- leni536 2y agohttps://eel.is/c++draft/alg.c.library#4 https://eel.is/c++draft/alg.c.library#4 Any library implementation that is C++ compliant must implement this. I'm pretty sure that libstdc++ + glibc is compliant, assuming sane glibc compiler options.
- Arech 2y agoa perfect answer, thank you!
- Arech 2y agobut to me these are - again - a user induced problems. I'm interested if a user doesn't do stupid things, should they still afraid that a standard extern C code could throw? Say, std::sprintf() which if I'm not mistaken boils down to C directly? Are there cases where C std lib could throw without a "help from a user"?
- leni536 2y agohttps://eel.is/c++draft/res.on.exception.handling#2 https://eel.is/c++draft/res.on.exception.handling#2 I general functions from the C standard library must not throw, except for the ones taking function pointers that they execute.
- Arech 2y agoperfect again, thank you!
- tsimionescu 2y agoI don't think anything in the C parts of the C++ standard library throws its own exceptions. However, it's not completely unreasonable for a third party C library to use a C++ library underneath, and that might propagate any exceptions that the C++ side throws. This would be especially true if the C library were designed with some kind of plugin support, and someone supplied a C++ plugin.