On Mon, Mar 04, 2024 at 07:34:06PM +0100, Sven Joachim wrote: > Not really, these arches now default to a 64-bit time_t and therefore > you get the conflicting types (suseconds_t is a long int, > __suseconds64_t a long long int). This has nothing to do with implicit > function declarations.
It's a bit crazy that tv_usec changes type, it should be in [0,1000000) no matter what tv_sec is: struct timeval { #ifdef __USE_TIME_BITS64 __time64_t tv_sec; /* Seconds. */ __suseconds64_t tv_usec; /* Microseconds. */ #else __time_t tv_sec; /* Seconds. */ __suseconds_t tv_usec; /* Microseconds. */ #endif }; #endif But the fix is straightforward, no? Just change the offending test to something like CPPUNIT_ASSERT_EQUAL(static_cast<decltype(c.tv_usec)>(999999), c.tv_usec); and it should work no matter what type c.tv_usec is. Or, if you prefer brace-initialization (which would prevent you from ever writing in a too-big value, like 999999999999999 or something): CPPUNIT_ASSERT_EQUAL(decltype(c.tv_usec){999999}, c.tv_usec); /* Steinar */ -- Homepage: https://www.sesse.net/