Я объявляю два шаблона, первый преобразует аргумент x
из типа T
в тип U
а второй из типа U
в тип T
Если я вызываю cast
с 10, компилятор не жалуется. Я думаю, что оба отвечают требованиям, которые нужно использовать, и поэтому должна быть двусмысленность, это правда? Этот код печатает 10.
#include <iostream>
template<typename T, typename U>
U cast(T x) {
return static_cast<U>(x);
}
template<typename T, typename U>
T cast(U x) {
return static_cast<T>(x);
}
int main() {
std::cout << cast<int,float>(10) << '\n';
}