テンプレートメタプログラミング、私は多くの場合、次のように実行します。違い::崩壊とstd :: remove_reference
template <typename T>
S<T> make_wrapper(T&& t) { return S<T>(std::forward<T>(t)); }
私は戻り値の型にstd::decay
のようなものを使用する必要があります知っているが、なぜstd::remove_reference
もうまくいかないでしょうか?ここでの違いは何ですか? std::remove_cvref
はどうですか?
「Tが何であるかに応じて、より多くのことができます」(http://en.cppreference.com/w/cpp/types/decay) –
あなたはそれらについて読んだことがありますか?たとえば、[この 'std :: decay'リファレンス](http://en.cppreference.com/w/cpp/types/decay)と[この' std :: remove_reference'リファレンス](http://en.cppreference .com/w/cpp/types/remove_reference)。 –