关于“template”跟“引用”

关于“template”和“引用”
我的代码如下:(平台是VS2005,系统XP)
#include <iostream>
using std::cout;
using std::endl;


double _min( double& a, double& b ) {
  cout << "call " << "double min" << endl;
  return a < b ? a : b;
}

template <typename T>
T _min( const T& a, const T& b ) {
  cout << "call " << "template min" << endl;
  return a < b ? a : b;
}

int main() {
  double dc = _min( 1.4, 2.4 );
  cout << "The result is " << dc << endl;
}

编译通过,结果如下:

call template min
The result is 1.4

这里调用的是 template _min();

后来吧double _min( double& a, double& b ) 改作 double _min( double a, double b )
编译通过,结果如下:

call double min
The result is 1.4

我又把 template _min 的整个函数注释掉,把double _min() 的传值参数 改为 原来的 传引用参数
编译未通过。

颇有不解。

------解决方案--------------------
整型常量属于 rvalue,不能绑定到 non-const lvalue reference 上,所以编译错误。
double _min( double const& a, double const& b );
double _min( double a, double b );
都行,就是 double& 不行。

------解决方案--------------------
C/C++ code
#include <iostream>
using std::cout;
using std::endl;



//这种情况无论是传值的时候是传变量都
    
double _min( double& a, double& b ) {
    cout << "call " << "double min" << endl;
    return a < b ? a : b;
}


/*
//这种情况无论是传值的时候是传常量还是变量都OK
double _min( double a, double b ) {
    cout << "call " << "double min" << endl;
    return a < b ? a : b;
}
*/

//只有在没有更匹配的非模板函数的时候,才会调用
template <typename T>
T _min( const T& a, const T& b ) {
    cout << "call " << "template min" << endl;
    return a < b ? a : b;
}

int main()
 {
    double a = 1.4;
    double b = 2.4;

    double dc = _min( 1.4, 2.4 );
    //double dc = _min( a, b);
    cout << "The result is " << dc << endl;
}