Jestem trochę zmieszany z destruktorami i noexcept
. Rozumiem, że w C++ 11 każdy destruktor, w tym zdefiniowany przez użytkownika, jest domyślnie noexcept(true)
, nawet jeśli my go od niego otrzymamy throw
. I trzeba wyraźnie określić, noexcept(false)
, jeśli z jakiegoś powodu chcą, aby tak było.Destruktory i noexcept
To, co widzę, jest całkiem odwrotne - z GCC 4.7.2, zdefiniowany przez użytkownika destruktor, bez względu na to, jak prymitywna jest klasa i destruktor, jest domyślnie noexcept(false)
. Czego tu mi brakuje? Czy jest jakiś ukryty błąd z destruktorami zdefiniowanymi przez użytkownika?
12,4/3: „Oświadczenie o destructor, że nie ma wyjątków specyfikacją uważany jest niejawnie mieć taką samą specyfikację wyjątku, co domyślne zgłoszenie (15.4). " to znaczy, destruktor jest tylko "noexcept (true)", jeśli wszystkie elementy i bazy mają destruktor noexcept. – ipc