при инстанциировании шаблона функции (о, великий и могучий русский язык, оказывается, можно перевести

Проблема следующая (см код ниже):
компилятор как мне видится,
1) не выводит тип
2) не отличает ссылку от значения
Код: Выделить всё
template <typename _T> int foo(_T* pT) {
//do smth for pointers
}
template <typename _T> int foo(_T& pT) {
//do something symantically else for references
}
main () {
X x;
X& rx=x;
X* px=&
foo<X*>(px); // explicit -> fine.
foo<X&>(rx); // doesn't work :-(( (№2)
foo(px); // error C2667: 'foo' : none of 2 overload have
foo(rx); // a best conversion (№1)
}