問題タブ [static-assert]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
592 参照

c++ - MSVC10でSFINAE、type traits、static_assertを使用することはできません

私はエラーメッセージを改善するためにいくつかの賢明な静的アサーションの使用を調査してきました。次に例を示します。

IDEONEは、私が取得したいと思っていた、すてきでクリーンなエラーメッセージでこのコードを喜んで拒否します(とにかく、nullptrを0に置き換えたら)。ただし、MSVCは静的アサーションを起動せず、このコードを正常にコンパイルします。メンバー関数をいくつか追加して呼び出しを開始した場合でも同様です。

0 投票する
2 に答える
1039 参照

c++ - 実際に使用されている場合にのみメンバーテンプレートで static_assert する方法は?

この単純なクラスを考えてみましょう:

テンプレート型からの暗黙的な構築と、単純なラッパーであるその型への暗黙的な変換を許可します。

今、関係のない s 間の変換を有効にしたくありませんFoo。これは、これらの暗黙的な構築/変換のために可能になります。テンプレート化された copy-ctor を非公開にすることはできますが、static_assert.

問題は、ここで Ideoneに示されているようstatic_assertに、タイプをコピーしようとしても失敗することです! Visual Studio では、必要な動作が得られますが、これは VS がテンプレートを解析する方法によるものだと思います。これを機能させる方法はありますか?

0 投票する
5 に答える
16755 参照

c++ - タイプ名を static_assert 出力に組み込みますか?

私は役立つエラーやメッセージを提供するのが好きで、自分のためにもそうしたいと思っていますstatic_assert。問題は、それらがテンプレート パラメーターに依存していることです。通常、これらのパラメーターはエラーが発生したために途中で表示されますが、それらはあいまいであるかグループ化されていないため、意味があります。例:

MSVC での出力:

1 つのタグは関数テンプレート自体に記載されており、もう 1 つのタグはクラス テンプレートの下に記載されています。あまり良くない。GCCが出力するものを見てみましょう:

はるかに優れていますが、まだ実際にはどこにあるかはわかりませんstatic_assert。そして、いくつかのパラメータ、テンプレート、またはその両方を想像してみてください。震える

これを回避する 1 つの方法は、両方のタグをテンプレート パラメーターとして受け取る中間構造体を使用することです。

出力をもう一度見てみましょう。

ずっといい!GCCが言うことは次のとおりです。

見た目は悪くない。問題:エラーメッセージはstatic_assert文字列リテラルである必要があるため、すべてのテンプレートに対してそのような構造体を作成する必要があります...

さて、私の質問ですが、どうにかして型名を に直接含めることはできますstatic_assertか? お気に入り

出力例:

Foo<int,main::TagA>から作成できませんFoo<int,main::TagB>

または、それが達成できない場合は、何とかしてエラー メッセージを追加のテンプレート パラメーターにして、問題ないようにすることはできますか?

0 投票する
2 に答える
532 参照

visual-studio-2010 - 関数宣言の static_assert

を使用した非常に単純な関数がありますstatic_assertstatic_assert問題は、関数宣言に関連する動作、特に戻り値の型を推測したいことです。コンパイラが戻り値の型の推定に失敗するstatic_assertに起動できるように、を挿入する場所がないようです。

ここまでは戻り値の型推定と静的アサーションを構造体に入れました。これにより、アサーションが起動されます。これは素晴らしいことですが、型推論でエラーが発生します。これは、私が除去したいノイズです。

0 投票する
2 に答える
3121 参照

c++ - static_assert が Visual C++ 10 で機能しない

Visual C++ 10 には組み込みstatic_assertの. ただし、次をコンパイルすると

私は得る

エラー C3861: 'static_assert': 識別子が見つかりません

static_assertVisual C++ 10 でどのように使用すればよいですか?

0 投票する
3 に答える
1646 参照

c++ - 構造体内の静的アサートは許可されていますか?

いくつかのテンプレート設定構造体がありますが、これらの構造体で静的アサートを使用しても大丈夫ですか?

ご回答ありがとうございます!

0 投票する
4 に答える
8113 参照

c++ - 型がベクトルかどうかを static_assert で確認できますか?

型がベクトルかどうかを static_assert で確認できますか? IE では、 a はintアサーションを発生させますが、avector<int>はそうしません。
私は次のようなことを考えています:

0 投票する
2 に答える
4446 参照

c++ - typedef ベースの静的アサートよりもテンプレート ベースの静的アサートを好むのはなぜですか?

組み込みの を持たないバージョンの C++ では、広く使用されている static assert の実装が 2 つありますstatic_assert

最初のものはBoostで使用され、テンプレートとそのテンプレートの特殊化を使用します:

ここで、チェックする条件が false になると、コンパイラはテンプレートの汎用バージョンを見つけることができず、コンパイルは失敗します。

2番目は次を使用しますtypedef

ここで、チェックする条件に違反すると、コンパイラtypedefはサイズ -1 の配列を試みますが、これは違法であるため、コンパイル時エラーが発生します。

コードを発行しないことが保証されており、次のように使用できるため、後者の方が優れています(ここから):

前者はそのようには使用できません。

後者よりも静的アサートの前者の実装を好む理由はありますか?

0 投票する
2 に答える
599 参照

c++11 - C++11: static_assert() の std::max(a,b)?

max私は、最後の C++-Std Doc N3291 の [24.4.7] ではないことに気付きましたconstexpr:

したがって、static_assertたとえば、これを使用することは許可されていません。正しい?

0 投票する
1 に答える
3931 参照

c++ - C ++ 0x構造体がPODであるかどうかを判断するためのコンパイル時の関数/マクロはありますか?

特定の構造体タイプがPODであるかどうかをテストするC++0x static_assertが必要です(他のプログラマーが誤って新しいメンバーでそれを壊さないようにするため)。すなわち、

is_pod_type()ここで使用できるマクロまたは組み込みの種類はありますか?C ++ 0xのドキュメントでは見つかりませんでしたが、もちろん、0xに関するWebの情報はまだ断片的です。