mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Static assertion for && and || expressions
This commit is contained in:
		| @@ -13,8 +13,6 @@ | |||||||
|  |  | ||||||
| namespace Catch { | namespace Catch { | ||||||
|  |  | ||||||
| struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; |  | ||||||
|  |  | ||||||
| // Wraps the LHS of an expression and captures the operator and RHS (if any) - wrapping them all | // Wraps the LHS of an expression and captures the operator and RHS (if any) - wrapping them all | ||||||
| // in an ExpressionResultBuilder object | // in an ExpressionResultBuilder object | ||||||
| template<typename T> | template<typename T> | ||||||
| @@ -76,6 +74,8 @@ public: | |||||||
|     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); | ||||||
|     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); | ||||||
|     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); | ||||||
|  |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); | ||||||
|  |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     template<Internal::Operator Op, typename RhsT> |     template<Internal::Operator Op, typename RhsT> | ||||||
|   | |||||||
| @@ -16,6 +16,8 @@ | |||||||
|  |  | ||||||
| namespace Catch { | namespace Catch { | ||||||
|  |  | ||||||
|  | struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; | ||||||
|  |  | ||||||
| // Wraps the (stringised versions of) the lhs, operator and rhs of an expression - as well as | // Wraps the (stringised versions of) the lhs, operator and rhs of an expression - as well as | ||||||
| // the result of evaluating it. This is used to build an AssertionResult object | // the result of evaluating it. This is used to build an AssertionResult object | ||||||
| class ExpressionResultBuilder { | class ExpressionResultBuilder { | ||||||
| @@ -43,6 +45,9 @@ public: | |||||||
|  |  | ||||||
|     AssertionResult buildResult( AssertionInfo const& info ) const; |     AssertionResult buildResult( AssertionInfo const& info ) const; | ||||||
|  |  | ||||||
|  |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); | ||||||
|  |     template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     AssertionResultData m_data; |     AssertionResultData m_data; | ||||||
|     struct ExprComponents { |     struct ExprComponents { | ||||||
|   | |||||||
| @@ -33,9 +33,7 @@ TEST_CASE | |||||||
| { | { | ||||||
|     std::pair<int, int> aNicePair( 1, 2 ); |     std::pair<int, int> aNicePair( 1, 2 ); | ||||||
|  |  | ||||||
|     // !TBD: would be nice if this could compile without the extra parentheses |     REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair );     | ||||||
|     REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair ); |  | ||||||
|      |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////// | ||||||
| @@ -45,13 +43,8 @@ TEST_CASE | |||||||
|     "Where the is more to the expression after the RHS" |     "Where the is more to the expression after the RHS" | ||||||
| ) | ) | ||||||
| { | { | ||||||
|     /* | //    int a = 1, b = 2; | ||||||
|     int a = 1; | //    REQUIRE( a == 2 || b == 2 ); | ||||||
|     int b = 2; |  | ||||||
|  |  | ||||||
|     // This only captures part of the expression, but issues a warning about the rest |  | ||||||
|     REQUIRE( a == 2 || b == 2 ); |  | ||||||
|      */ |  | ||||||
|     WARN( "Uncomment the code in this test to check that it gives a sensible compiler error" ); |     WARN( "Uncomment the code in this test to check that it gives a sensible compiler error" ); | ||||||
| } | } | ||||||
| /////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////// | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash