問題タブ [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.

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

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 で意図された動作であるかどうかを最初に確認したかったのです。

ありがとうございました。

編集:以下の回答に基づいて、それはバグであることが判明したため、ここで報告しました。

0 投票する
0 に答える
367 参照

c++ - C++1z の公理の例は何ですか?

C++1z は概念 (制約 + 公理) を言語に導入する必要があります。すでに述べた公理 (再帰的、交換的、推移的) を除いて、他に役立つ公理は何ですか? 公理はコンパイラの最適化にのみ使用するべきですか、それとも別の目的にも使用できますか?

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

c++ - ラムダファンクター引数でrequire句を使用するには?

ラムダ ファンクターの引数に一般的な requires 句を適用する方法はありますか?

2 つの制約がC1ありC2、引数に対してチェックしたいとします。関数には同様の構文が許可されているため、次のように動作すると予想していました。

しかし、これはGCC 6ではコンパイルできません。

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

c++ - -std=c++0x を指定して g++ 4.2.2 を使用してコンパイルできない

g++ 4.7.2 でコンパイルするときに、c++0x の機能を使用しました。すべて正常に動作します。しかし、g++ 4.2.2 を使用してコンパイルするという制限があり、すべてが失敗し始めました。私の「そう」がコンパイルされるように使用できる簡単な救済策はありますか。

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

c++ - 概念の定義では、requires 式の外で置換の失敗が許可されますか?

次のコードを検討してください。

GCC はそれを正常にコンパイルし、10 を出力します

しかし、 N4553の§14.10.1.2述語制約[temp.constr.pred]は言う

述語制約は、定数式 E (5.19) を評価する制約です。

その後

置換後、E は bool 型になります。

C1<decltype(std::declval<A>() + std::declval<A>())>bool型ではなく、置換の失敗なので、プログラムの形式が正しくないということですか?

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

c++ - 概念と宣言の順序

私はSVNのGCCでコンセプトライトを試してきました。私の理解不足が原因であると思われる問題に遭遇しました。誰かが私を正しい方向に向けることができれば幸いです。私のコードは次のとおりです。

ここでは単純な概念 を定義しますDrawable。これは、指定された type のパラメーターをconst T&関数がdraw(t)コンパイルすることを要求することを目的としています。

draw(const std::string&)次に、文字列を に「描画」する関数を定義しますcout。最後に、コンセプトにstd::string一致するかどうかをチェックします。Drawabledraw()static_assert

ただし、概念定義のdraw(const std::string&) 前に宣言を含めない限り、静的アサートは失敗し、その理由はわかりません。

これは概念で予想される動作ですか、それとも何か間違っていますか?

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

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 の概念では、一連の引数から要素を構築する必要があります。その決定には何か理由がありますか?