1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:47:44 +00:00

AK: Add SFINAE fallback for AK C++ concepts use, for Coverity compiler

The Coverity compiler doesn't support C++2a yet, and thus doesn't
even recognize concept keywords. To allow serenity to be built and
analyzed on such compilers, add a fallback underdef to perform
the same template restriction based on AK::EnableIf<..> meta
programming.

Note: Coverity does seem to (annoyingly) define __cpp_concepts, even
though it doesn't support them, so we need to further check for
__COVERITY__ explicitly.
This commit is contained in:
Brian Gianforcaro 2020-08-16 15:11:05 -07:00 committed by Andreas Kling
parent 2030a49a1e
commit ff0c7da75d
3 changed files with 17 additions and 3 deletions

View file

@ -62,7 +62,11 @@ public:
virtual bool discard_or_error(size_t count) = 0;
};
#if defined(__cpp_concepts) && !defined(__COVERITY__)
template<Concepts::Integral Integral>
#else
template<typename Integral, typename EnableIf<IsIntegral<Integral>::value, int>::Type = 0>
#endif
InputStream& operator>>(InputStream& stream, Integral& value)
{
stream.read_or_error({ &value, sizeof(value) });
@ -70,12 +74,18 @@ InputStream& operator>>(InputStream& stream, Integral& value)
}
#ifndef KERNEL
#if defined(__cpp_concepts) && !defined(__COVERITY__)
template<Concepts::FloatingPoint FloatingPoint>
#else
template<typename FloatingPoint, typename EnableIf<IsFloatingPoint<FloatingPoint>::value, int>::Type = 0>
#endif
InputStream& operator>>(InputStream& stream, FloatingPoint& value)
{
stream.read_or_error({ &value, sizeof(value) });
return stream;
}
#endif
inline InputStream& operator>>(InputStream& stream, bool& value)