O ile mogę powiedzieć, nie ma gwarancji, że funkcja zdefiniowana za pomocą linku "C" nie spowoduje wyjątków. Standard umożliwia programowi C++ zarówno wywoływanie funkcji zewnętrznej z łączem języka "C", jak i definiowanie funkcji napisanych w języku C++, które mają połączenie języka "C". Dlatego nic nie stoi na przeszkodzie, aby program w C++ wywoływał funkcję z łączeniem językowym "C", które faktycznie jest napisane w C++ (w innej jednostce kompilacji może, chociaż nawet to nie jest konieczne). Byłoby to dziwne, ale trudno to wykluczyć. Również nie widzę gdzie w standardzie mówi, że spowodowałoby to niezdefiniowane zachowanie (w rzeczywistości, ponieważ Standard nie może zdefiniować funkcji nie zapisanej w C++, byłoby to użycie tylko wtedy, gdy formalnie nie ma niezdefiniowane zachowanie).
W konsekwencji myślę, że błędem byłoby zakładać, że powiązanie "C" implikuje noexcept
.
nie wyobrażam sobie tej skali przerwy zgodności w ewolucji języka C++, czyż nie? – Sheen
To jest dość wątpliwe, czy złamie kompatybilność. Programy, które wyciekają wyjątki z funkcji C, zawsze mogły mieć niezdefiniowane zachowanie. – Puppy
Powiązane http://stackoverflow.com/a/15845731/242520 –