================ @@ -0,0 +1,30 @@ +.. title:: clang-tidy - bugprone-unintended-char-ostream-output + +bugprone-unintended-char-ostream-output +======================================= + +Finds unintended character output from ``unsigned char`` and ``signed char`` to an +``ostream``. + +Normally, when ``unsigned char (uint8_t)`` or ``signed char (int8_t)`` is used, it +is more likely a number than a character. However, when it is passed directly to +``std::ostream``'s ``operator<<``, resulting in character-based output instead +of numeric value. This often contradicts the developer's intent to print +integer values. + +.. code-block:: c++ + + uint8_t v = 9; + std::cout << v; // output '\t' instead of '9' + +It could be fixed as + +.. code-block:: c++ + + std::cout << static_cast<uint32_t>(v); ---------------- carlosgalvezp wrote:
Absolutely, this is a valid code pattern (magic or not) that the tool should not warn about. In the docs, if wanted, we could mention both cases as examples, and also explain that unary plus leads to the same result as `static_cast<int>`. https://github.com/llvm/llvm-project/pull/127720 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits