假设我们有以下代码:
由于第一个
附:我看过this和that问题,但在答案中没有看到任何真正的证明。
上面链接中的答案以及这个问题的答案都声称
现在我们有一个几乎与以下内容相同的示例:
但是它被以完全不同的方式处理。为什么?为什么
template<typename T>
class C
{};
template <typename T, template <typename> class Container>
void dummyMe(Container<T>&&)
{};
int main(int argc, char* argv[])
{
C<int> c;
dummyMe(c);
return 0;
}
由于第一个
dummyMe
参数是右值引用,所以无法编译。能否有人用标准语言解释一下为什么模板模板参数与转发引用不兼容?并在通俗易懂的英语中解释原因。附:我看过this和that问题,但在答案中没有看到任何真正的证明。
上面链接中的答案以及这个问题的答案都声称
Container<T>
不能被视为模板参数。我看不出为什么会这样。让我们把例子变得更简单:template <template <typename=int> class Container>
void dummyMe(Container<>&&)
{};
现在我们有一个几乎与以下内容相同的示例:
template <typename Container>
void dummyMe(Container&&)
{};
但是它被以完全不同的方式处理。为什么?为什么
Container<>&&
不能被视为与template <typename=int> class Container
的Container&&
相同,就像typename Container
一样?
Container
被推断为什么?template <typename> C&
?这不是一个可以放置引用限定符的有效语句。 - yuri kilochekdummyMe<int, C<int>&>(C<int>&)
,没有其他的。 - ixSci