请教一个模板函数选择的问题

一:template void shownm(type & a);
template<> void shownm(type & double a);
二:template void shownm(type a);
template<> void shownm(type & double a);
当如下语句执行时,以上两种情况,编译器选择哪个版本?
double p;
shownm(p);
经过实践,我发现情况一选择显示具体化,情况二选择模板隐式生成函数,所以我就不太明白是怎么回事,哪位大神能帮我解答一下。

在线等答案 求大蛇指点。