は、我々は、ユーザー定義の控除のガイドと一緒に、このようなクラスがあるとしましょうガイド。演繹されたテンプレート引数とは何でしょうか?ユーザー定義の自動テンプレート控除対は、優先順位
いくつかの実験が行われた後、それはコンパイラによって異なります。すなわち、GCC 7と打ち鳴らす6(トランクから)は、空のパックとint
とArgs
とT
をインスタンス化し、自動ガイドを選択するように見える、従って出力は
Args and T: Foo<T, Args>::Foo(Args&& ..., T&&) [with T = int; Args = {}]
打ち鳴らす5であり、一方、選択
just Args: Foo<Void, int>::Foo(Args &&...) [T = Void, Args = <int>]
どちらの選択肢が正しいか、この場合、どのようにユーザー定義の控除ガイドを使用するのですか?
wandboxで利用可能な完全な例。
ctor#2から合成された関数で 'Args'が推論されないコンテキストになっているのはなぜですか?それは完全に信じられないようです:この特定のケースでは空のパックです。 – 0xd34df00d
@ 0xd34f00d http://eel.is/c++draft/temp#deduct.type-5.7 – Barry
右、私はバグレポートに表示されたものに近い簡単な例を投げてきました。すべてのgccを試してみましたが、5と6の両方がうまくいきましたので、正しいと思いました。あなたが与えたリンクはそれが証明していない!興味深いことに、clang <4はコードを拒否します。現時点では、既存のコンパイラでコードを動作させるために、ダミータグパラメータを2番目のctorに追加しました。これは、実装の詳細であり、クラスユーザーから呼び出されるべきではないからです。どうもありがとう! – 0xd34df00d