2017-04-18 15 views

Trả lời

14

Có. Từ [temp.constr.expr], từ ngữ như của N4641:

Một biểu hiện hạn chế là một hạn chế mà xác định một yêu cầu về sự hình thành của một biểu thức E thông qua thay thế đối số mẫu. Một ràng buộc biểu thức được thỏa mãn nếu thay thế năng suất E không thành công. Trong giới hạn biểu thức, E là toán hạng chưa được đánh giá (Điều 5).

Vì vậy, việc sử dụng declval sẽ không sao.

Ngoài ra, bạn chỉ có thể tạo các đối tượng của các loại bạn cần vì trong bối cảnh yêu cầu, chúng tôi không thực sự xây dựng bất cứ điều gì:

template<typename T> 
concept bool SomeConcept = requires(T a, int i) { 
    { a.someFunction(std::move(i)) } -> int; 
}; 
+0

Cảm ơn Barry! Bằng cách này, có bất kỳ lợi thế khác để nhận được biến hơn là cú pháp dễ đọc hơn? Nó chỉ là thực hành tốt hơn hay có một số cạm bẫy mà tôi nên biết? –

+0

@GuillaumeRacicot Có lẽ hơi sớm để nói về thực hành tốt hơn. Cá nhân, tôi muốn tránh tất cả các khái niệm meta-lập trình meta trước khi có thể. – Barry

Các vấn đề liên quan