Các mã sauGọi phương thức constexpr thông qua tham chiếu - là kết quả của một biểu thức không đổi?
#include <array>
void foo(const std::array<int, 42> &a)
{
constexpr size_t S = a.size();
}
int main() {}
biên dịch tốt trong GCC, nhưng thất bại trong việc biên dịch trong kêu vang với thông báo lỗi sau
main.cpp:5:28: error: constexpr variable 'S' must be initialized by a constant expression
constexpr size_t S = a.size();
^~~~~~~~
Trong khi đó, nhiều bài viết về constexpr
vấn đề trên SO dường như ngụ ý kêu vang thường có hỗ trợ tốt hơn (nhiều người hơn?) cho constexpr
. Vậy, trình biên dịch nào sẽ đúng trong trường hợp này?
Lưu ý rằng cả hai trình biên dịch sẵn sàng chấp nhận mã khi thông số tham chiếu được thay thế bằng thông số giá trị theo từng giá trị.