BOOST_UNLIKELY and boost::system::error_code
Could you please modify the BOOST_LIKELY and BOOST_UNLIKELY macros in the following way:
#define BOOST_LIKELY(x) (__builtin_expect(!!(x), 1))
#define BOOST_UNLIKELY(x) (__builtin_expect(!!(x), 0))
- I cannot easily use
BOOST_UNLIKELYwithboost::system::error_code. Compiler complains
error: cannot convert ‘boost::system::error_code’ to ‘long int’ for argument ‘1’ to ‘long int __builtin_expect(long int, long int)’
[build] if (BOOST_UNLIKELY (ec)) {
[build] ^
To workaround the problem I should use macro like following:
if (BOOST_UNLIKELY (!!ec))
... which looks weird and causes unwanted questions during the code review.
- I have to add extra braces:
if (BOOST_UNLIKELY (!!ec))
^ -- here ^ --- and here
... instead of:
if BOOST_UNLIKELY (ec)
{
}
To modify the BOOST_LIKELY and BOOST_UNLIKELY macros to handle boost::system::error_code, you can redefine them to ensure compatibility without needing additional braces. Here's the updated version:
#define BOOST_UNLIKELY(x) (__builtin_expect(static_cast<bool>(x), 0))
This approach uses static_cast<bool>(x) to explicitly cast the condition to a boolean type, making it compatible with boost::system::error_code and similar types. This allows you to use the macros as follows:
// Handle error
}
This change ensures the macros work correctly without needing extra braces.