sizeof ...がこのエイリアステンプレートで機能しないのはなぜですか?

ty

可変個引数関数を特定の数の入力(たとえば2つ)に制限したいと思います。そのため、これは私の環境(VS2017、C ++ 17)で正常に機能します:

#include <type_traits>

template<typename... T> 
auto f(T...) -> typename std::enable_if<sizeof...(T) == 2>::type {
    // no-op
}

int main() {
    // f(1); // should fail
    f(1,2);
    // f(1,2,3); // should fail
}

しかし、エイリアステンプレートを導入しても、そうではありません。

#include <type_traits>

template<typename... T> 
using two_params = typename std::enable_if<sizeof...(T) == 2>::type; 


template<typename... T> 
auto f(T...) -> two_params<T...> { // failed to specialize alias template

}

int main() {
    // f(1); // should fail
    f(1,2);
    // f(1,2,3); // should fail
}

興味深いことに、条件を1 または実際に必要な入力数に変更すると、置換は成功します。

// This works, except that it permits a single argument even when it shouldn't.
// Both conditions ||'d together seems to be needed in the general case.
template<typename... T> 
using two_params = typename std::enable_if<sizeof...(T) == 1 || sizeof...(T) == 2>::type; 

f(1,2)2つの値生成するようですsizeof...(T)ここで何が起こっているのですか?

私が見たいくつかの参考文献:

平均

MicrosoftのJonathanEmmettは、これがコンパイラのバグであることを確認しました。

このレポートをありがとう。これがエイリアステンプレートとパック拡張のコンパイラバグであることを確認できます。現在、エイリアススペシャライゼーションの主要な修正セットに取り組んでおり、この作業は現在VS 201715.9リリースに含まれる予定です。このリワークの一環として、このバグが修正されていることも確認できます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

sizeofが期待どおりに機能しないのはなぜですか?

分類Dev

構造体のsizeofが各メンバーのsizeofの合計と等しくないのはなぜですか?

分類Dev

sizeof(x ++)がxをインクリメントしないのはなぜですか?

分類Dev

sizeofの機能

分類Dev

sizeof(T)== sizeof(int)ですか?

分類Dev

配列の長さを取得するsizeof関数が関数で機能しないのはなぜですか?

分類Dev

この配列のsizeof()が不正なのはなぜですか?

分類Dev

sizeof(my_arr)[0]がコンパイルされ、sizeof(my_arr [0])と等しいのはなぜですか?

分類Dev

sizeof(type)==定数を比較するとC ++テンプレートの特殊化が機能しない

分類Dev

引数が配列を指す逆参照ポインタである場合、 `sizeof()`が期待どおりに機能しないのはなぜですか?

分類Dev

標準Cのsizeofとsizeof()?

分類Dev

offsetof(member)がsizeof(struct)と等しいのはなぜですか?

分類Dev

CのSizeof(char [])

分類Dev

typedefされたポインタのsizeofでgccエラーが発生するのはなぜですか

分類Dev

sizeof(int)が正しいのに、sizeof intが間違っているのはなぜですか?

分類Dev

C ++バリアント:Convertingコンストラクターでsizeof ...(Types)がゼロ以外である必要があるのはなぜですか

分類Dev

sizeofと関数テンプレート:sizeof(&f)とsizeof(&f <int>)

分類Dev

なぜsizeof(x)++はコンパイルするのですか?

分類Dev

このsizeof演算子でエラーが発生するのはなぜですか?

分類Dev

sizeof(* p)とsizeof(p)の違いは?

分類Dev

(ptr --A [0])/(sizeof(A [0])/ sizeof(A [0] [0]))のタイプは何ですか?

分類Dev

sizeof演算子がforループ条件で評価されないのはなぜですか?

分類Dev

sizeof(char + char)が4を返すのはなぜですか?

分類Dev

sizeof(char + char)が4を返すのはなぜですか?

分類Dev

sizeof()が配列の長さを返さないのはなぜですか?

分類Dev

sizeofが配列の長さを示さないのはなぜですか?

分類Dev

powerPCで構造体配列へのポインタをインクリメントする場合sizeofが期待どおりに機能しない

分類Dev

sizeof(int)と異なるsizeof(MPI_INT)

分類Dev

このCloudFormationテンプレートスクリプトが機能しないのはなぜですか?

Related 関連記事

  1. 1

    sizeofが期待どおりに機能しないのはなぜですか?

  2. 2

    構造体のsizeofが各メンバーのsizeofの合計と等しくないのはなぜですか?

  3. 3

    sizeof(x ++)がxをインクリメントしないのはなぜですか?

  4. 4

    sizeofの機能

  5. 5

    sizeof(T)== sizeof(int)ですか?

  6. 6

    配列の長さを取得するsizeof関数が関数で機能しないのはなぜですか?

  7. 7

    この配列のsizeof()が不正なのはなぜですか?

  8. 8

    sizeof(my_arr)[0]がコンパイルされ、sizeof(my_arr [0])と等しいのはなぜですか?

  9. 9

    sizeof(type)==定数を比較するとC ++テンプレートの特殊化が機能しない

  10. 10

    引数が配列を指す逆参照ポインタである場合、 `sizeof()`が期待どおりに機能しないのはなぜですか?

  11. 11

    標準Cのsizeofとsizeof()?

  12. 12

    offsetof(member)がsizeof(struct)と等しいのはなぜですか?

  13. 13

    CのSizeof(char [])

  14. 14

    typedefされたポインタのsizeofでgccエラーが発生するのはなぜですか

  15. 15

    sizeof(int)が正しいのに、sizeof intが間違っているのはなぜですか?

  16. 16

    C ++バリアント:Convertingコンストラクターでsizeof ...(Types)がゼロ以外である必要があるのはなぜですか

  17. 17

    sizeofと関数テンプレート:sizeof(&f)とsizeof(&f <int>)

  18. 18

    なぜsizeof(x)++はコンパイルするのですか?

  19. 19

    このsizeof演算子でエラーが発生するのはなぜですか?

  20. 20

    sizeof(* p)とsizeof(p)の違いは?

  21. 21

    (ptr --A [0])/(sizeof(A [0])/ sizeof(A [0] [0]))のタイプは何ですか?

  22. 22

    sizeof演算子がforループ条件で評価されないのはなぜですか?

  23. 23

    sizeof(char + char)が4を返すのはなぜですか?

  24. 24

    sizeof(char + char)が4を返すのはなぜですか?

  25. 25

    sizeof()が配列の長さを返さないのはなぜですか?

  26. 26

    sizeofが配列の長さを示さないのはなぜですか?

  27. 27

    powerPCで構造体配列へのポインタをインクリメントする場合sizeofが期待どおりに機能しない

  28. 28

    sizeof(int)と異なるsizeof(MPI_INT)

  29. 29

    このCloudFormationテンプレートスクリプトが機能しないのはなぜですか?

ホットタグ

アーカイブ