問題タブ [template-aliases]
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.
c++ - 関数内でテンプレート化された型エイリアスを宣言できないのはなぜですか?
関数内でテンプレート化された型エイリアスを宣言できないのはなぜですか?
エラー:テンプレート宣言はブロック スコープで表示できません
これらの宣言をブロック スコープの外に置く必要があるのはなぜですか?
c++ - テンプレートのエイリアシングから typedef に切り替える方法は?
基本的にレジストリ デザイン パターンを実装するテンプレート クラスがあります。値はキーに登録され、コンテナに格納されます。
次に、次のようなシーケンス コンテナーで使用できます。
エイリアスでも使用できます。
しかし、次のように typedef で使用する方法がわかりません。
私は基本的に次のようなものが欲しいです:
どうもありがとうございました。
c++ - void を使用すると、依存タイプのパック控除が失敗します... いつ、なぜですか?
この質問は別の質問のフォローアップです。
次のコードを検討してください。
(2)をコメントアウトすると、例は準拠します。そうしないと、コンパイルは失敗します。リンクされた質問から、 (2)が次の理由で失敗することが
わかります。
非依存型 void の単一の名前のないパラメーターで構成されるパラメーター リストは、空のパラメーター リストと同等です。この特殊なケースを除いて、パラメーターは typecv void を持ってはなりません。
さらに:
[注: 型推定は、次の理由で失敗する可能性があります: — [...] — パラメーターの型が void である関数型、または戻り値の型が関数型または配列型である関数型を作成しようとしています。— [...] —エンドノート]
私には明らかではないのは、(1)がコンパイルされる理由です。
言い換えると、(2)Args
が依存型であり、上記の制限に悩まされているために失敗した場合:
同じ問題が以下に影響Args
するはずです。
この場合のように使用void
しても問題ないのはなぜですか?
ラッシュは、この種の署名も受け入れる に向けられていることに注意してください。S<void(void)>
std::function
c++ - テンプレート エイリアス、テンプレートの特殊化、およびテンプレート テンプレート パラメータ
テンプレート エイリアスとテンプレートの特殊化の組み合わせを使用して、テンプレート パラメーターの基になるテンプレートを特定したいと考えています。次のコードは、gcc 4.8、6.2.1 では正常にコンパイルされますが、clang 3.5、3.8 ではコンパイルされません。
標準に準拠している動作はどれですか?
c++ - テンプレート化されたエイリアスは、非推定コンテキストの内部および外部パラメーター パックを実行していますか?
問題はここから来ました- もう少し一般的な問題を解決するアプローチを作成したかったのです。例を考えてみましょう:
clang ではコードのコンパイルに問題はありませんが、gcc では次のエラーが表示されます。
私を混乱させているのは、同じエイリアスを使用している場合、gcc の推論に問題はありませんが、外部パラメーター パックが関与していない場合です。
問題は、外部および内部クラスのパラメーター パックをこの形式のエイリアスと組み合わせて、コンパイラーにテンプレート パラメーターの 1 つを推測させることは合法ですか、それとも gcc のバグですか?
編集(ボグダンのコメントに基づく):
このコードはMSVC(2017 RC)にも問題を引き起こしますが、EDGコンパイラではこの形で動作し、icc(バージョン16と17)でも問題なくコードを扱えるようです。また、エイリアスの代わりにクラスを使用した同様のコード ( bogdan によるいくつかの場所での推定コンテキストとも見なされる) は、コンパイラにさらに多くの問題を引き起こすことにも注意してください - clang だけがこのバージョンをうまく処理しているようです(?)
c++11 - forward_as_tuple を使用して従来の関数シグネチャにパラメーター パックを渡す
私のアプリでは、従来の関数シグネチャを介してパラメーター パックを渡し、値を変更したいと考えています。コメントとして私の試みで私の質問を示すコードは次のとおりです。
パラメータパックを宣言可能な左辺値にする方法はありますか?