constraints)により従来SFINAE技法よりも関数テンプレートのオーバーロード制御が容易となるが、戻り値型にSFINAE-unfriendlyなメタ関数を用いるケースでは意図しないコンパイルエラーを引き起こす。C++20から遡及適用されるため、本記事の内容は全て無効となる。☆(ゝω・)vヤッタネ本記事の内容はStackOverflowで見つけた質問と回答に基づく。必須要件(Mandates)違反によるコンパイルエラーとなる(→id:yohhoy:20200605)。overloading)という順序に起因している。前掲コードを古き良きSFINAE技法に書き換えると、オーバーロード#1の戻り値型導出よりも前に候補除外されstd::make_signedメタ関数の必須要件違反は回避される。一方でrequires節に比べると煩雑なコード記述が必要とされる。13.10.2/p5より引用(下線部は強調)。Study*1:実際の振る舞いはC++標準ライブラリ内部実装に依存する。ならずに、期待通りオーバーロード#2が選択される可能性もある。1注目記事はてなブログをはじめよう!yohhoyさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。