mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 07:16:10 +01:00
Fix warnings from stringifying functions
The only way to stream those is to use the `bool` overload of `op<<`.
However, to convert a function to bool, GCC creates AST equivalent
of `A? true : false`. Then, because `A` is a function, it warns that
it will never be `false`. 🤦
As a bonus, newer GCC versions issue _two_ different warnings about
this, but older GCC versions do not know both of them, so we also
have to suppress warning about unknown warning suppression.
This commit is contained in:
parent
8d1e7ca896
commit
33b47f7309
@ -39,11 +39,27 @@ namespace Catch {
|
|||||||
|
|
||||||
auto str() const -> std::string;
|
auto str() const -> std::string;
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
// Old versions of GCC do not understand -Wnonnull-compare
|
||||||
|
#pragma GCC diagnostic ignored "-Wpragmas"
|
||||||
|
// Streaming a function pointer triggers Waddress and Wnonnull-compare
|
||||||
|
// on GCC, because it implicitly converts it to bool and then decides
|
||||||
|
// that the check it uses (a? true : false) is tautological and cannot
|
||||||
|
// be null...
|
||||||
|
#pragma GCC diagnostic ignored "-Waddress"
|
||||||
|
#pragma GCC diagnostic ignored "-Wnonnull-compare"
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
auto operator << ( T const& value ) -> ReusableStringStream& {
|
auto operator << ( T const& value ) -> ReusableStringStream& {
|
||||||
*m_oss << value;
|
*m_oss << value;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
auto get() -> std::ostream& { return *m_oss; }
|
auto get() -> std::ostream& { return *m_oss; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user