Trong đoạn mã sau, tôi nghĩ rằng xác nhận không nên kích hoạt nhưng nó có.noexcept của một hàm trả về một lớp có ném destructor
struct A
{
~A() noexcept(false);
};
A f() noexcept;
int main()
{
static_assert(noexcept(f()), "f must be noexcept");
}
Chức năng f()
không rõ ràng, nhưng noexcept(f())
được đánh giá là sai. (trong cả gcc và clang)
Tôi có thiếu thứ gì đó hay là lỗi?
is điều này trong một bản thảo C++ 17? Tôi không thể tìm thấy passge của bạn trong tiêu chuẩn C++ 14. – Simple
@ Đơn giản: Có, từ đầu. Câu hỏi hay, tôi không biết khi nào điều này thay đổi lần cuối. –
@ Đơn giản: Có vẻ như từ ngữ đã được thêm vào như một phần của độ phân giải của [CWG 1992] (http://wg21.link/cwg1992), được chấp nhận là Báo cáo lỗi tại cuộc họp tháng 2 năm 2016. Là một khiếm khuyết có nghĩa là vấn đề có thể được sửa đổi trước cho tất cả các phiên bản trước đó, mặc dù, vì nó nắm bắt về cơ bản những gì * nên * luôn luôn có nghĩa là. –