15
是概念定義的主體還是需要塊未評估的上下文?例如。我可以安全地使用std::declval
嗎?是否需要塊的主體未評估上下文?
template<typename T>
concept bool SomeConcept = requires(T a) {
{ a.someFunction(std::declval<int>()) } -> int;
};
是概念定義的主體還是需要塊未評估的上下文?例如。我可以安全地使用std::declval
嗎?是否需要塊的主體未評估上下文?
template<typename T>
concept bool SomeConcept = requires(T a) {
{ a.someFunction(std::declval<int>()) } -> int;
};
是的。從[temp.constr.expr],措詞的N4641:
一種表達約束是指定通過的模板參數替代上的表達
E
的形成的要求的約束。如果替代產出E
沒有失敗,則滿足表達式約束。 在表達式約束中,E
是未評估的操作數(第5章)。
所以使用declval
應該沒問題。
或者,你可以僅僅創建以來的要求的範圍內所需要的類型的對象,我們並沒有實際構建什麼:
template<typename T>
concept bool SomeConcept = requires(T a, int i) {
{ a.someFunction(std::move(i)) } -> int;
};
感謝巴里!順便說一句,接收變量還有其他什麼好處,而不是更可讀的語法嗎?這只是更好的練習還是我應該注意的一些陷阱? –
@GuillaumeRacicot可能早點談論什麼是更好的做法。就個人而言,我希望在可能的情況下避免所有的前期元編程黑客行爲。 – Barry