У меня есть следующий фрагмент кода:
#include <cstdint>
template <typename T>
T test(T a, T b)
{
float aabb = reinterpret_cast<float>(a - b);
}
int main(int argc, const char *argv[])
{
std::uint8_t a8, b8;
test(a8, b8);
return 0;
}
Я знаю, что reinterpret_cast<float>
не может работать и что он дает ошибку во время компиляции. Я использую эту ошибку, поэтому компилятор сообщает мне тип a - b
.
Проблема в том, что в этом случае он говорит, что тип a - b
равен int
, если оба они uint8_t (unsigned char)
. То же самое происходит с uint16_t
. Но не с uint32_t
, который говорит, что a - b
есть unsigned int
.
Итак, мой вопрос: это намеренное поведение (что unsigned char - unsigned char дает int), или это какая-то странная ошибка компилятора (проверена как с GCC, так и с clang)?