1 に答える
2
いいえ、ユニバーサル参照は、左辺値参照として推定されるテンプレート引数に依存しています。Tの左辺値参照にすることはできないT<U>&&ため、機能しません。
機能するのは を使用T&&することと、 SFINAE を使用していくつかの と一致させることT<U>です。
template <template<int> class T, int U>
void foo_helper(const volatile T<U>&);
template <template<int> class T, int U>
void foo_helper(const volatile T<U>&&);
template <typename T, typename = decltype(foo_helper(std::declval<T>()))>
void foo(T&& param)
{
cout << param.str << endl;
}
orを直接foo使用する場合は、必要に応じてヘルパー型の特性を提供することもできます。TU
于 2015-02-19T12:34:03.000 に答える