c++问题:什么时候需要用额外的模版变量,friend为什么可以放在定义的前面?

图片1!
![图片2图片说明
图片3!

图片1和2代码完全正确,可以运行。图片3代码错误,编译不通过

我有两个疑问:
1. 为什么图片1中需要一个额外的模版变量U,而图片2不需要这样操作。什么时候需要用额外的模版变量呢?

2.friend函数的一般用法是:在类外定义某个函数,然后在类中用friend对该函数进行声明。为什么图片1中friend函数定义的部分写在类里面了,但是图片2中却不能这样操作?(图片3中就是错误的)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^