0
4

1 に答える 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 に答える