В случае, если это ошибка / проблема компилятора, я использую Visual Studio 2017.
Нет, ошибки компилятора нет.Все работает, как и ожидалось.
Кто-нибудь знает, почему С ++ не работает с функцией variadic printf?
printf("printf value: %f", value);
неявно вызывает ваш оператор преобразования и строго ожидает значение float
, а не экземпляр Float32
.
Он не может этого сделать, поскольку %f
разрешается во время выполнения, и printf()
не знает, что у вашего класса есть оператор преобразования в это время.
Исправим ли код?
Вы должны выполнить приведение еще явно:
printf("printf value: %f", (float)value);
Поскольку template<typename T> std::ostream& operator<<(std::ostream, const T&)
являетсяФункция шаблона, она выведет наилучшее возможное преобразование во время компиляции, и это будет работать наоборот.