2017-04-18 13 views

答えて

14

はい。 N4641のように[temp.constr.expr]、言葉遣いから:

表現制約はテンプレート引数の置換により表現Eの形成に必要条件を指定する制約です。 Eの代入が失敗しなかった場合、式の制約が満たされます。 式制約内で、Eは評価されていないオペランド(第5項)です。

したがって、declvalを使用すると問題ありません。

要件の文脈の中で、私たちは実際には何を構築していないので、別の方法として、あなたはちょうどあなたが必要とする種類のオブジェクトを作成することができます。

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

を感謝バリー!ところで、より読みやすい構文ではなく、変数を受け取る他の利点はありますか?それは単なるより良い練習か、私が気づくべきいくつかの落とし穴がありますか? –

+0

@GuillaumeRacicotおそらく少し早い時期に、より良い方法について話をするでしょう。個人的には、可能であればすべてのpre-Conceptsメタプログラミング・ハッキングを避けたいと思います。 – Barry

関連する問題