Từ những gì tôi hiểu, một hàm constexpr có thể được thực hiện tại thời gian biên dịch cũng như thời gian chạy, tùy thuộc vào việc toàn bộ việc đánh giá có thể được thực hiện tại thời gian biên dịch hay không.Làm thế nào tôi có thể thực hiện một thời gian chạy khẳng định trong một hàm constexpr?
Tuy nhiên, bạn không thể quá tải hàm này để có thời gian chạy và đối tác thời gian biên dịch. Vì vậy, câu hỏi của tôi là, làm thế nào tôi có thể đặt trong một thời gian chạy khẳng định để đảm bảo rằng việc thực hiện các chức năng thời gian chạy được thông qua các thông số hợp lệ cùng với static_assert của tôi? Không.
Tôi cũng đã phát hiện ra rằng bạn có thể sử dụng khẳng định trực tiếp trong ngữ cảnh danh sách. 'constexpr bool in_range (int val, int min, int max) {return (khẳng định (min <= max), min <= val && val <= max); } 'Về cơ bản, bạn phải làm cho nó để nó không bao giờ có thể nhận được cuộc gọi không constexpr nếu được sử dụng trong một bối cảnh constexpr về thất bại. Điều này có tác dụng bởi vì, khẳng định là một macro với một biểu thức bậc ba, nó đánh giá để gọi hàm không phải là constexpr cơ bản về lỗi. – Adrian
@Adrian thú vị cần lưu ý rằng [toán tử dấu phẩy chỉ được phép trong các biểu thức liên tục trong C++ 11] (http://stackoverflow.com/q/27324573/1708801). –
@Adrian mặc dù điều đó sẽ không thể di chuyển vì nó dựa trên chi tiết triển khai của 'khẳng định' không được bao gồm trong tiêu chuẩn. –