uint8_t iostream behavior

c++, c++11, iostream

Solution

`uint8_t` is an alias for `unsigned char`, and the iostreams have special overloads for chars that print out the characters rather than formatting numbers.

The conversion to integer inhibits this.

Problem

I was expecting the code: `cout << uint8_t(0);` to print `0`, but it doesn't print anything. When I try to stream `uint8_t` objects to `cout`, I get strange characters with gcc. Is this expected behavior? Could it be that `uint8_t` is an alias for some `char`-based type? See compiler/system notes below. ``` #include <cstdint> #include <iostream> void print(const uint8_t& n) { std::cout << ">>>" << n << "<<< " << ">>>" << (unsigned int)(n) << "<<<\n"; } int main() { uint8_t a; uint8_t b(0); uint8_t c = 0; uint8_t d{0}; uint8_t e = 1; uint8_t f = 2; // Note that the first print statement uses an unset uint8_t // and therefore the behaviour is undefined. (Included here for // completeness) for (auto i : {a, b, c, d, e, f}) { print(i); } } ``` Compiling and running it as follows: ``` g++ test-uint8.cpp -std=c++11 && ./a.out ``` - using `gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)` - on the system `Linux 3.7.9-101.fc17.x86_64` ... produces the output: ``` >>>�<<< >>>194<<< >>><<< >>>0<<< >>><<< >>>0<<< >>><<< >>>0<<< >>><<< >>>1<<< >>><<< >>>2<<< ```

Original source

Related problems