Я создал шаблонную структуру и пытаюсь перегрузить бинарные операторы.По какой-то причине функция не возвращает правильный тип данных, даже если тип правильно приведен между ними.
template<typename T>
struct Number{
const T value;
Number(T a) : value(a) {}
template<typename U>
auto operator*(Number<U> other){
auto new_value = value*other.value;
std::cout << typeid(new_value).name() << std::endl;
return Number(new_value);
}
};
Теперь, если я выполню эту операцию с помощью следующего кода, вызываемого в main.Возвращает номер типа первого, а не номер более высокого типа.
auto b = Number<int>(6) * Number<double>(2.3); // this should be an int*double=double
std::cout << b.value << typeid(b.value).name() << std::endl;
auto c = Number<double>(2.3) * Number<int>(6);
std::cout << c.value << typeid(c.value).name() << std::endl;
Вывод выглядит следующим образом: d 13i d 13.8d
Из того, что я понимаю, неверныйконструктор вызывается, когда функция возвращает новый Number(new_value)
.Я не понимаю, как и почему это происходит, поскольку new_value имеет «правильный тип».