Narrowing conversation from int to signed char, но никакого преобразования нет

Начал писать такой вот метод:

char getDigitInRadix(char d, int radix) {
    if (d < 10)
        return d + (char)48;
    
}

Clion подсвечивает d и выдаёт предупреждение: Clang-Tidy: Narrowing conversion from 'int' to signed type 'char' is implementation-defined, хотя никакого преобразования тут нет: d имеет тип char, он складывается с выражением типа char, функция в результате возвращает выражение типа char.


Ответы (1 шт):

Автор решения: user7860670

По неизвестным причинам С++ не поддерживает арифметические операции для целочисленных типов меньше int. В выражении return d + (char)48; каждый операнд сначала преобразуется в int, а затем результирующий int преобразуется в char.

А еще если условие не выполняется, то будет неопределенное поведение, так как отсутствует return.

→ Ссылка