模版推导有关问题

模版推导问题
char szBuffer[128];

情况1:
template<class type,int size>
void tryabc(type (&) [size])
{
}

tryabc(szBuffer);
为什么这个可以正确推导,为什么&要加括号,加括号什么意思,不加括号就报引用数组是非法的的错误

情况2:

template<class type,int size>
void tryabc(type adb[size])
{
}
tryabc(szBuffer);
为什么这个不可以正确推导

情况3:
template<class type,int size>
void tryabc(type &adb[size])
{
}
tryabc(szBuffer);
为什么这个直接报错,说不能是模板定义

------解决方案--------------------
1 数组的引用
2 实际上是type* adb。size没有了
3 数组语法不是这么来的