Implement P1286R2, Contra CWG1778

Programming / Compilers / GCC - jason [138bc75d-0d04-0410-961f-82ee72b054a4] - 23 October 2019 20:41 EDT

The C++11 requirement that an explicit exception-specification on a defaulted function match the implicit one was found to be problematic for std::atomic. This paper, adopted in February, simply removes that requirement: if an explicitly defaulted function has a different exception-specification, that now works just like a user-written function: either it isn't noexcept when it could be, or it is noexcept and will call terminate if an exception is thrown.

- method.c (defaulted_late_check): Don't check explicit exception-specification on defaulted function. (after_nsdmi_defaulted_late_checks): Remove.
- parser.h (struct cp_unparsed_functions_entry): Remove classes.
- parser.c (unparsed_classes): Remove. (push_unparsed_function_queues, cp_parser_class_specifier_1): Adjust.

bddb104ab76 Implement P1286R2, Contra CWG1778
gcc/cp/ChangeLog | 11 +++++
gcc/cp/method.c | 69 +++-----------------------------
gcc/cp/parser.c | 14 +------
gcc/cp/parser.h | 4 --
gcc/testsuite/g++.dg/DRs/dr1778.C | 7 ++++
gcc/testsuite/g++.dg/cpp0x/defaulted23.C | 4 +-
gcc/testsuite/g++.dg/cpp0x/defaulted43.C | 10 ++---
7 files changed, 32 insertions(+), 87 deletions(-)

Upstream: gcc.gnu.org


  • Share