| 348 | // Type trait that checks if a type is a (potentially const) char pointer. |
| 349 | template <typename T> |
| 350 | struct IsCharPointer { |
| 351 | using Pointee = std::remove_cv_t<std::remove_pointer_t<T>>; |
| 352 | static constexpr bool value = |
| 353 | std::is_pointer_v<T> && |
| 354 | (std::is_same_v<Pointee, char> || std::is_same_v<Pointee, signed char> || |
| 355 | std::is_same_v<Pointee, unsigned char>); |
| 356 | }; |
| 357 | |
| 358 | // Counterpart to Storage that depends on both operands. This is used to prevent |
| 359 | // char pointers being treated as strings in the log output - they might point |
nothing calls this directly
no outgoing calls
no test coverage detected