私はこのコードを持っている:驚きとこの特定のケースでテンプレートパラメータが必要なのはなぜですか?
struct Base {};
template<typename T>
struct Foo : Base {};
struct Bar {
template<typename T> // v--- What's happening here?
Bar(T foo) : baz{std::make_unique<Foo>(foo)} {}
std::unique_ptr<Base> baz;
};
を、GCCとクランを受け入れ、それをコンパイルします。それはFoo
のテンプレートパラメータを推定するようですが、それは意味をなさないでしょう。テンプレートテンプレートパラメータをとるstd::make_unique
の過負荷がなくても、コンパイラはそれをどのように受け入れますか? Live example
エラー...できれば、そのコンストラクタで 'Bar'オブジェクトを作成してみてください。コンパイラがコードを受け入れるかどうかを教えてください。 – WhiZTiM
@WhiZTiMコードを拒否します。私はまだ両方のコンパイラが不一致のテンプレートパラメータの型について不平を言っていないことは本当に奇妙であることがわかります。 –