Làm thế nào để viết một khái niệm sẽ mô tả các loại dựa trên phạm vi cho vòng lặp được kích hoạt cho?Làm thế nào để viết một khái niệm phạm vi đơn giản?
Một nỗ lực là:
template < typename Range > concept bool RRange
= requires(Range range) {{std::begin(range),std::end(range)};};
nhưng những gì tôi thực sự muốn là một số điều như thế này:
template < typename Range > concept bool RRange
= requires(Range range) {{for(auto&& item : range);};}; // compile error
có nghĩa là, RRange
được các khái niệm về tất cả các loại biểu thức for(auto&& item : range);
có giá trị . cách tốt nhất để đạt được điều này là gì?
Tôi đang sử dụng ảnh chụp GCC7 với g++ -std=c++1z -fconcepts
.
Đó là tốt để thêm một cảnh báo rằng do cách spec được viết, mã người dùng chỉ có thể làm cho một nỗ lực nỗ lực tốt nhất tại khái niệm-ifying tính năng ngôn ngữ này (mặc dù một tính năng rất tốt). Có (rất) trường hợp cạnh bệnh lý không thể bị bắt. –
@LucDanton Tôi đã viết lại khái niệm để hoạt động trên các biến có tên, theo yêu cầu của các ngữ nghĩa cho phạm vi. Tuy nhiên, trường hợp kiểm tra bổ sung không thành công và tôi không biết tại sao. Nó có thể là một trường hợp cạnh, như bạn đã đề cập trước đó? –
Tôi không nên bỏ qua kiểm tra trường hợp thử nghiệm mới với giải pháp trước đó. Tôi đã sửa nó thông qua sự thừa hưởng 'declref' được thêm vào. Cảm ơn mọi thứ. –