引数なしのメンバー関数を無効にしようとすると、SFINAEがdecltype()内で機能しない

ジェレミー・サルウェン

std::enable_ifメンバー関数を無効にするために使用しようとしている次のクラスに問題を絞り込みました

#include <type_traits>

int foo(int& x) {
    return x;
}

template<bool enable>
struct A {
int x;
template<bool dummy=true,
        typename Enabler = typename std::enable_if<dummy && enable>::type>
 auto disabled_method() const -> decltype(foo(x)) {

    return foo(x);
 }
};

int main() {
    A<false> x;
}

!でdecltype(foo(x))関数を無効にする必要がありますが、式に型エラーがありますenable_if

関数の戻り値の型で発生することに特に注意してください。たとえばdecltype(foo(x))、を関数の本体に移動すると、SFINAEは正常に機能します。

template<bool dummy=true,
        typename Enabler = typename std::enable_if<dummy && enable>::type>
 auto disabled_method() const -> int {
    decltype(foo((X)x)) local;
    return foo(x);
 }

decltype(foo((X)x))引数型として使用する場合も同様)

同様に、次のように宣言すると、SFINAEが正しく実行されます。

template<bool dummy=true,
        typename X = const int,
        typename Enabler = typename std::enable_if<dummy && enable>::type>
 auto disabled_method() const -> decltype(foo((X)x)) {

    return foo(x);
 }

ただし、を使用decltype(foo((const int)x))すると、Xがconst int上記と等しいにもかかわらず、エラーが発生します。これは、テンプレートパラメータに追加のキャストを導入するとX、置換が遅れることを示しているようです。

しかし、dummyおよびEnabler上記テンプレートパターンアップは、とにかくそれを行うことになっていますか?

なんでこんなことが起こっているの?

TC

これは「即時コンテキスト」とは何の関係もありません。

一般に、非依存構造のエラーにより、プログラムの形式が正しくないNDRになります(診断は不要)[temp.res] / 8を参照してください実装には、そのような問題を診断する(または診断しない)ための広い余地があります。

あなたの場合、foo(x)テンプレートパラメータに依存せず、常に形式が正しくありません。したがって、実装は、Aインスタンス化されていない場合でも、自由に診断できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

変数を関数に渡すと「無効な引数」が返されますが、ハードコーディングするとAppsScriptで機能します

分類Dev

SFINAEがメンバー関数テンプレートを条件付きでコンパイルするように機能しない

分類Dev

関数内で引数を渡すときにDplyrの「Arrange」関数が機能しない

分類Dev

メンバー関数のdecltype(auto)は無効な本体を無視し、decltype(expr)は失敗します

分類Dev

フレンド関数としてではなく、クラスのメンバー関数としてostream関数を実装して、仮想関数として使用できるようにするにはどうすればよいですか?

分類Dev

行の配列を反復するときに関数 'replace'が機能しないようです

分類Dev

ノードJS:配列のループと関数コールバックとPromiseがどのように機能するかを理解していない

分類Dev

ノードJS:配列のループと関数コールバックとPromiseがどのように機能するかを理解していない

分類Dev

Rubyでは、各ステートメント内でputs関数を使用すると、なぜ三項演算子が機能しないのですか?

分類Dev

関数の引数としてchar配列を渡し、関数内で変更しようとすると、セグメンテーションエラーが表示されるのはなぜですか?

分類Dev

要素のinnerHTMLにPHPステートメントが機能しないことを入力するJavaScript関数

分類Dev

マングースObjectIDが関数の引数として機能しない

分類Dev

ビットマップを表示しようとしているときに、システム引数の例外パラメータが無効です

分類Dev

ホバー時にパラメーターとして関数を渡すことが機能しない

分類Dev

関数定義のdecltypeの依存型または引数が、decltypeなしで宣言されているとコンパイルに失敗する

分類Dev

関数定義のdecltypeの依存型または引数が、decltypeなしで宣言されているとコンパイルに失敗する

分類Dev

部分適用に関する警告をローカルで無効にすることが機能しないように見える理由

分類Dev

ファイルからの引数を無視するDIffが機能していないようです

分類Dev

LeetCodeの問題に対する私の解決策は、ヘルパー関数を使用して改善しようとするまでは問題なく機能します。引数が返されていません

分類Dev

Rでlars回帰を実行しようとすると、「rep(1、n)のエラー:無効な「回」引数」

分類Dev

window.stopメソッドは、関数内で使用すると機能しないようです

分類Dev

addEventListenerに引数を渡すときに関数が機能しない

分類Dev

addEventListenerに引数を渡すときに関数が機能しない

分類Dev

List <book>にデータを追加しようとしましたが、「メソッドのオーバーロードなしには2つの引数が必要です」というメッセージが表示されます。私に何ができる?

分類Dev

素早い質問、IFステートメントは要素を無効にするとwhileループで機能しないようです

分類Dev

ループ内のPaste()関数/ ifがRで意図したとおりに機能していないようです

分類Dev

テンプレート引数としてのメンバー関数ポインターが継承されたメンバー関数で失敗しました、どのようにそしてなぜですか?

分類Dev

パターンマッチング部分関数で、ケースパターンに含めることができない無効な入力に対してisDefinedがfalseを返すようにするにはどうすればよいですか?

分類Dev

この関数のx、yパラメーターがかなり長い間同じであるかどうかを確認しようとしていますが、機能していないようです

Related 関連記事

  1. 1

    変数を関数に渡すと「無効な引数」が返されますが、ハードコーディングするとAppsScriptで機能します

  2. 2

    SFINAEがメンバー関数テンプレートを条件付きでコンパイルするように機能しない

  3. 3

    関数内で引数を渡すときにDplyrの「Arrange」関数が機能しない

  4. 4

    メンバー関数のdecltype(auto)は無効な本体を無視し、decltype(expr)は失敗します

  5. 5

    フレンド関数としてではなく、クラスのメンバー関数としてostream関数を実装して、仮想関数として使用できるようにするにはどうすればよいですか?

  6. 6

    行の配列を反復するときに関数 'replace'が機能しないようです

  7. 7

    ノードJS:配列のループと関数コールバックとPromiseがどのように機能するかを理解していない

  8. 8

    ノードJS:配列のループと関数コールバックとPromiseがどのように機能するかを理解していない

  9. 9

    Rubyでは、各ステートメント内でputs関数を使用すると、なぜ三項演算子が機能しないのですか?

  10. 10

    関数の引数としてchar配列を渡し、関数内で変更しようとすると、セグメンテーションエラーが表示されるのはなぜですか?

  11. 11

    要素のinnerHTMLにPHPステートメントが機能しないことを入力するJavaScript関数

  12. 12

    マングースObjectIDが関数の引数として機能しない

  13. 13

    ビットマップを表示しようとしているときに、システム引数の例外パラメータが無効です

  14. 14

    ホバー時にパラメーターとして関数を渡すことが機能しない

  15. 15

    関数定義のdecltypeの依存型または引数が、decltypeなしで宣言されているとコンパイルに失敗する

  16. 16

    関数定義のdecltypeの依存型または引数が、decltypeなしで宣言されているとコンパイルに失敗する

  17. 17

    部分適用に関する警告をローカルで無効にすることが機能しないように見える理由

  18. 18

    ファイルからの引数を無視するDIffが機能していないようです

  19. 19

    LeetCodeの問題に対する私の解決策は、ヘルパー関数を使用して改善しようとするまでは問題なく機能します。引数が返されていません

  20. 20

    Rでlars回帰を実行しようとすると、「rep(1、n)のエラー:無効な「回」引数」

  21. 21

    window.stopメソッドは、関数内で使用すると機能しないようです

  22. 22

    addEventListenerに引数を渡すときに関数が機能しない

  23. 23

    addEventListenerに引数を渡すときに関数が機能しない

  24. 24

    List <book>にデータを追加しようとしましたが、「メソッドのオーバーロードなしには2つの引数が必要です」というメッセージが表示されます。私に何ができる?

  25. 25

    素早い質問、IFステートメントは要素を無効にするとwhileループで機能しないようです

  26. 26

    ループ内のPaste()関数/ ifがRで意図したとおりに機能していないようです

  27. 27

    テンプレート引数としてのメンバー関数ポインターが継承されたメンバー関数で失敗しました、どのようにそしてなぜですか?

  28. 28

    パターンマッチング部分関数で、ケースパターンに含めることができない無効な入力に対してisDefinedがfalseを返すようにするにはどうすればよいですか?

  29. 29

    この関数のx、yパラメーターがかなり長い間同じであるかどうかを確認しようとしていますが、機能していないようです

ホットタグ

アーカイブ