mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Fix compiling with C++17 + Clang 5 + libstdc++ v5
This basically tests the combination where the compiler supports most of C++17 but the library does not.
This commit is contained in:
		
				
					committed by
					
						
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			
						parent
						
							023b5306b4
						
					
				
				
					commit
					86f86c4c23
				
			@@ -61,6 +61,13 @@ matrix:
 | 
			
		||||
              packages: ['clang-5.0']
 | 
			
		||||
      env: COMPILER='clang++-5.0' CPP14=1
 | 
			
		||||
 | 
			
		||||
    - os: linux
 | 
			
		||||
      compiler: clang
 | 
			
		||||
      addons:
 | 
			
		||||
          apt:
 | 
			
		||||
              sources: *all_sources
 | 
			
		||||
              packages: ['clang-5.0']
 | 
			
		||||
      env: COMPILER='clang++-5.0' CPP17=1
 | 
			
		||||
 | 
			
		||||
    - os: linux
 | 
			
		||||
      compiler: clang
 | 
			
		||||
 
 | 
			
		||||
@@ -222,7 +222,7 @@
 | 
			
		||||
  // Check if byte is available and usable
 | 
			
		||||
  #  if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
 | 
			
		||||
  #    include <cstddef>
 | 
			
		||||
  #    if __cpp_lib_byte > 0
 | 
			
		||||
  #    if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0)
 | 
			
		||||
  #      define CATCH_INTERNAL_CONFIG_CPP17_BYTE
 | 
			
		||||
  #    endif
 | 
			
		||||
  #  endif // __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
 | 
			
		||||
 
 | 
			
		||||
@@ -55,11 +55,11 @@ namespace Matchers {
 | 
			
		||||
            return arr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #ifdef CATCH_CPP17_OR_GREATER
 | 
			
		||||
#if defined( __cpp_lib_logical_traits ) && __cpp_lib_logical_traits >= 201510
 | 
			
		||||
 | 
			
		||||
        using std::conjunction;
 | 
			
		||||
 | 
			
		||||
        #else // CATCH_CPP17_OR_GREATER
 | 
			
		||||
#else // __cpp_lib_logical_traits
 | 
			
		||||
 | 
			
		||||
        template<typename... Cond>
 | 
			
		||||
        struct conjunction : std::true_type {};
 | 
			
		||||
@@ -67,7 +67,7 @@ namespace Matchers {
 | 
			
		||||
        template<typename Cond, typename... Rest>
 | 
			
		||||
        struct conjunction<Cond, Rest...> : std::integral_constant<bool, Cond::value && conjunction<Rest...>::value> {};
 | 
			
		||||
 | 
			
		||||
        #endif // CATCH_CPP17_OR_GREATER
 | 
			
		||||
#endif // __cpp_lib_logical_traits
 | 
			
		||||
 | 
			
		||||
        template<typename T>
 | 
			
		||||
        using is_generic_matcher = std::is_base_of<
 | 
			
		||||
 
 | 
			
		||||
@@ -62,12 +62,12 @@ TEST_CASE("tables", "[generators]") {
 | 
			
		||||
 | 
			
		||||
// Structured bindings make the table utility much nicer to use
 | 
			
		||||
TEST_CASE( "strlen2", "[approvals][generators]" ) {
 | 
			
		||||
    auto [test_input, expected] = GENERATE( table<std::string, size_t>({
 | 
			
		||||
            {"one", 3},
 | 
			
		||||
            {"two", 3},
 | 
			
		||||
            {"three", 5},
 | 
			
		||||
            {"four", 4}
 | 
			
		||||
        }));
 | 
			
		||||
    using tuple_type = std::tuple<std::string, int>; // see above workaround
 | 
			
		||||
    auto [test_input, expected] =
 | 
			
		||||
        GENERATE( table<std::string, size_t>( { tuple_type{ "one", 3 },
 | 
			
		||||
                                                tuple_type{ "two", 3 },
 | 
			
		||||
                                                tuple_type{ "three", 5 },
 | 
			
		||||
                                                tuple_type{ "four", 4 } } ) );
 | 
			
		||||
 | 
			
		||||
    REQUIRE( test_input.size() == expected );
 | 
			
		||||
}
 | 
			
		||||
@@ -103,11 +103,9 @@ TEST_CASE( "strlen3", "[generators]" ) {
 | 
			
		||||
static auto eatCucumbers( int start, int eat ) -> int { return start-eat; }
 | 
			
		||||
 | 
			
		||||
SCENARIO("Eating cucumbers", "[generators][approvals]") {
 | 
			
		||||
 | 
			
		||||
    auto [start, eat, left] = GENERATE( table<int,int,int> ({
 | 
			
		||||
            { 12, 5, 7 },
 | 
			
		||||
            { 20, 5, 15 }
 | 
			
		||||
        }));
 | 
			
		||||
    using tuple_type = std::tuple<int, int, int>;
 | 
			
		||||
    auto [start, eat, left] = GENERATE( table<int, int, int>(
 | 
			
		||||
        { tuple_type{ 12, 5, 7 }, tuple_type{ 20, 5, 15 } } ) );
 | 
			
		||||
 | 
			
		||||
    GIVEN( "there are " << start << " cucumbers" )
 | 
			
		||||
    WHEN( "I eat " << eat << " cucumbers" )
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user