này hoạt động và có giá trị mã C++ 11, bởi vì đối số mẫu là thời gian biên dịch chỉ:
template <int x>
constexpr int do_something() {
static_assert(x > 0, "x must be > 0");
return x + 5;
}
tôi phải đối mặt với các vấn đề tương tự như bạn đã làm với các biểu thức liên tục trong C++. Có ít tài liệu rõ ràng về constexprs tại thời điểm này. Và lưu ý rằng có một số lỗi đã biết với nó trong trình theo dõi vấn đề của gcc, nhưng vấn đề của bạn có vẻ không phải là một lỗi.
Lưu ý rằng nếu bạn khai báo hàm constexpr bên trong các lớp, bạn không thể sử dụng chúng trong lớp. Điều này cũng có vẻ không phải là một lỗi.
Chỉnh sửa: Đây là phép theo tiêu chuẩn: 7.1.3 bang
... hoặc một hợp chất-tuyên bố rằng chỉ chứa
- báo cáo null,
- static_assert -declarations
- khai báo typedef và khai báo bí danh không
xác định các lớp hoặc bảng liệt kê,
- sử dụng-khai,
- sử dụng-chỉ thị,
- và chính xác một sự trở lại tuyên bố
Cool, tôi không biết 'throw's trong một' chức năng constexpr' đó được gọi là trong một bối cảnh constexpr sẽ khiến quá trình biên dịch thất bại! – Xeo
@Xeo đang làm * mọi thứ * không biểu hiện ở phía bên kia?: Sẽ thực hiện công việc. :) –
Bổ sung tốt cho 'static_assert' tôi phải nói. :) – Xeo