Hello, I would argue the way it works currently is dangerous and asks for issues. Let me further demonstrate the problem with examples; 1. For <iostream> demonstration 1 /*-------------------------------------------------*/ #include <cstdint> #include <iostream> int main() { std::int8_t myInt{65}; std::cout << "Takes ASCII char " << myInt << '\n'; std::cout << "(static_cast): " << static_cast<int>(myInt) << '\n'; std::cout << "(int): " << (int)myInt << '\n'; return 0; } // First prints the ASCII character for 65, which is "A" // (int) and static_cast print 65 correctly. // The programmer learns to use (int) to print out int8_t /*-------------------------------------------------*/ 2. <iostream> demonstration 2 /*-------------------------------------------------*/ #include <cstdint> #include <iostream> int main() { std::cout << "Enter a number between 0 and 127: "; std::int8_t myInt{}; std::cin >> myInt; std::cout << "You entered (no cast): " << myInt << '\n'; std::cout << "You entered (static_cast): " << static_cast<int>(myInt) << '\n'; std::cout << "You entered ( (int) ): " << (int)myInt << '\n'; return 0; } // *User input:* 35 // You entered: 3 // this is the first char given onlly. The second one is ignored. // You entered (static_cast): 51 // this is when the programmer assumes (int) or static_cast<int> should be used // You entered ( (int )): 51 // 51 is the ASCII number for '3' . /*-------------------------------------------------*/ 3. <cstdio> demonstration 3 /*-------------------------------------------------*/ #include <iostream> #include <cstdint> #include <cstdio> int main() { std::int8_t num{}; std::scanf("%hhd", &num); // Read the number and store it in num std::printf("%d this for cstdio.h\n", num); // Print the value of num std::cout << sizeof(num) * 8; return 0; } //*User input*: 100 // prints correctly 100 // size is still int8_t.