テンプレートテンプレートとパラメーターの差し引きに問題があります。ここでは、コードです:テンプレートテンプレート関数とパラメーターの差し引き
template<typename U, template<typename> class T>
void test(T<U>&& t)
{
...
}
私は、これは左辺値と右辺値のいずれかを受け入れるように期待が、唯一の右辺値で動作します。この場合、折りたたみ規則 "T & & & = T &"は適用されません。
もちろん、左辺値参照関数も宣言できますが、コードは読みにくくなります。
私はなぜこれが必要なのかを尋ねる場合は、Tが特定のクラスであるかどうかを確認するためにstatic_assertを使用することです。もっと簡単な方法があれば、コードを変更してもうれしいですが、テンプレートテンプレートがこのように使用できるかどうかを知りたいと思います。
おかげtemplate<typename> class T
がしかクラステンプレートであることを推測することができ、参照型であることを推論することができるので、T<U>
は常にオブジェクト型に推定されるtypename T
とは異なり