問題タブ [c++-concepts]
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++1z でフレンド テンプレート クラス テンプレートを宣言すると、エラーが発生します:「テンプレートの特殊化」class A' は名前空間に出現する必要があります
私はブースト asio コルーチンを使用しており、新しいファイルシステム TS (-stdc++fs) を使用したかったので、GCC 6-20151025 スナップショットにアップグレードしました。うまくいきました。しかし、-std=c++1z をオンにすると、boost のソース コードの奥深くでエラーが発生しました。エラーを分離しました。これは最小限の例です。
-std=c++14 で問題なくコンパイルされますが、-std=c++1z では次のエラーが生成されます。
ソースでエラーを追跡したところ、pt.c で新しく導入された関数「maybe_new_partial_specialization」で動作が分岐しているようです。特に、Concepts TS がアクティブな場合にのみアクティブになる状態で。
バグとして報告する前に、これが Concepts TS/C++1z で意図された動作であるかどうかを最初に確認したかったのです。
ありがとうございました。
編集:以下の回答に基づいて、それはバグであることが判明したため、ここで報告しました。
c++ - C++1z の公理の例は何ですか?
C++1z は概念 (制約 + 公理) を言語に導入する必要があります。すでに述べた公理 (再帰的、交換的、推移的) を除いて、他に役立つ公理は何ですか? 公理はコンパイラの最適化にのみ使用するべきですか、それとも別の目的にも使用できますか?
c++ - ラムダファンクター引数でrequire句を使用するには?
ラムダ ファンクターの引数に一般的な requires 句を適用する方法はありますか?
2 つの制約がC1
ありC2
、引数に対してチェックしたいとします。関数には同様の構文が許可されているため、次のように動作すると予想していました。
しかし、これはGCC 6ではコンパイルできません。
c++ - -std=c++0x を指定して g++ 4.2.2 を使用してコンパイルできない
g++ 4.7.2 でコンパイルするときに、c++0x の機能を使用しました。すべて正常に動作します。しかし、g++ 4.2.2 を使用してコンパイルするという制限があり、すべてが失敗し始めました。私の「そう」がコンパイルされるように使用できる簡単な救済策はありますか。
c++ - 概念と宣言の順序
私はSVNのGCCでコンセプトライトを試してきました。私の理解不足が原因であると思われる問題に遭遇しました。誰かが私を正しい方向に向けることができれば幸いです。私のコードは次のとおりです。
ここでは単純な概念 を定義しますDrawable
。これは、指定された type のパラメーターをconst T&
関数がdraw(t)
コンパイルすることを要求することを目的としています。
draw(const std::string&)
次に、文字列を に「描画」する関数を定義しますcout
。最後に、コンセプトにstd::string
一致するかどうかをチェックします。Drawable
draw()
static_assert
ただし、概念定義のdraw(const std::string&)
前に宣言を含めない限り、静的アサートは失敗し、その理由はわかりません。
これは概念で予想される動作ですか、それとも何か間違っていますか?
c++ - イテレータを取るコンストラクタが要素をEmplaceConstructibleにする必要があるのはなぜですか?
標準 (n4296)、23.2.3/4 (表 100) のシーケンス stl コンテナーの要件を確認し、引数イテレーター (X - コンテナー、i および j - 入力イテレーター) を取るコンストラクターを読みました。
コンテナの要素型が EmplaceConstructible である必要があります。
コンストラクターは、範囲内の各反復子に対して std::allocator_traits::construct (m, p, *it) メソッドを呼び出すことで実装できると思います (ここで、m - 型 A のアロケーター、p - メモリへのポインター、it - 内の反復子) [i; j) であり、要素には CopyInsertable の概念のみが必要です。これは、コピー/移動に引数が 1 つしか提供されないためです。一方、EmplaceConstructible の概念では、一連の引数から要素を構築する必要があります。その決定には何か理由がありますか?