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
使用する場合は、必要に応じてヘルパー型の特性を提供することもできます。T
U
于 2015-02-19T12:34:03.000 に答える