Fix for comparing (const) char* to NULL
diff --git a/include/internal/catch_evaluate.hpp b/include/internal/catch_evaluate.hpp
index 90acad2..38e14f1 100644
--- a/include/internal/catch_evaluate.hpp
+++ b/include/internal/catch_evaluate.hpp
@@ -174,16 +174,26 @@
template<Operator Op, typename T>
bool compare( long lhs, const T* rhs )
{
- return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( NULL ), rhs );
-
+ return Evaluator<const T*, const T*, Op>::evaluate( reinterpret_cast<const T*>( lhs ), rhs );
}
template<Operator Op, typename T>
bool compare( long lhs, T* rhs )
{
return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs );
-
}
+
+ template<Operator Op, typename T>
+ bool compare( const T* lhs, long rhs )
+ {
+ return Evaluator<const T*, const T*, Op>::evaluate( lhs, reinterpret_cast<const T*>( rhs ) );
+ }
+
+ template<Operator Op, typename T>
+ bool compare( T* lhs, long rhs )
+ {
+ return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) );
+ }
} // end of namespace Internal
} // end of namespace Catch
diff --git a/projects/SelfTest/ConditionTests.cpp b/projects/SelfTest/ConditionTests.cpp
index f14da68..e9a8f68 100644
--- a/projects/SelfTest/ConditionTests.cpp
+++ b/projects/SelfTest/ConditionTests.cpp
@@ -221,6 +221,9 @@
}
#endif
+inline const char* returnsConstNull(){ return NULL; }
+inline char* returnsNull(){ return NULL; }
+
TEST_CASE( "./succeeding/conditions/ptr",
"Pointers can be compared to null" )
{
@@ -241,6 +244,9 @@
const TestData* const cpc = p;
REQUIRE( cpc != NULL );
+ REQUIRE( returnsNull() == NULL );
+ REQUIRE( returnsConstNull() == NULL );
+
// REQUIRE( NULL != p ); // gives warning, but should compile and run ok
}
diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp
index a95402d..48932dc 100644
--- a/projects/SelfTest/TestMain.cpp
+++ b/projects/SelfTest/TestMain.cpp
@@ -43,7 +43,7 @@
"Number of 'succeeding' tests is fixed" )
{
runner.runMatching( "./succeeding/*" );
- CHECK( runner.getTotals().assertions.passed == 273 );
+ CHECK( runner.getTotals().assertions.passed == 275 );
CHECK( runner.getTotals().assertions.failed == 0 );
}