mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	 ed0ea30149
			
		
	
	ed0ea30149
	
	
	
		
			
			This is not nearly all of them, because IWYU does not support the way Catch2 manages includes -- it expects that non-system includes are done using `#include "foo/bar/baz.hpp"`, while Catch2 uses `<foo/bar/baz.hpp>`. This causes trouble, because IWYU suggests removing every single internal header, and then adding them again, but using `""` in the include directive... the resulting suggestions cannot be used without a lot of manual work, as they are largely bogus. For bonus points, IWYU also _loves_ to suggest kinda-random stdlib headers for `size_t` and similar. Still, the resulting inclusion graph is somewhat better than it was before.
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  *  Created by Phil on 29/10/2010.
 | |
|  *  Copyright 2010 Two Blue Cubes Ltd. All rights reserved.
 | |
|  *
 | |
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying
 | |
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | |
|  */
 | |
| #ifndef TWOBLUECUBES_CATCH_COMMON_H_INCLUDED
 | |
| #define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED
 | |
| 
 | |
| #include <catch2/internal/catch_compiler_capabilities.hpp>
 | |
| #include <catch2/internal/catch_stringref.hpp>
 | |
| 
 | |
| #define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
 | |
| #define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
 | |
| #ifdef CATCH_CONFIG_COUNTER
 | |
| #  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
 | |
| #else
 | |
| #  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
 | |
| #endif
 | |
| 
 | |
| #include <iosfwd>
 | |
| 
 | |
| // We need a dummy global operator<< so we can bring it into Catch namespace later
 | |
| struct Catch_global_namespace_dummy {};
 | |
| std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
 | |
| 
 | |
| namespace Catch {
 | |
| 
 | |
|     struct CaseSensitive { enum Choice {
 | |
|         Yes,
 | |
|         No
 | |
|     }; };
 | |
| 
 | |
|     class NonCopyable {
 | |
|         NonCopyable( NonCopyable const& )              = delete;
 | |
|         NonCopyable( NonCopyable && )                  = delete;
 | |
|         NonCopyable& operator = ( NonCopyable const& ) = delete;
 | |
|         NonCopyable& operator = ( NonCopyable && )     = delete;
 | |
|     protected:
 | |
|         NonCopyable() noexcept = default;
 | |
|     };
 | |
| 
 | |
|     struct SourceLineInfo {
 | |
| 
 | |
|         SourceLineInfo() = delete;
 | |
|         constexpr SourceLineInfo( char const* _file, std::size_t _line ) noexcept:
 | |
|             file( _file ),
 | |
|             line( _line )
 | |
|         {}
 | |
| 
 | |
|         bool operator == ( SourceLineInfo const& other ) const noexcept;
 | |
|         bool operator < ( SourceLineInfo const& other ) const noexcept;
 | |
| 
 | |
|         char const* file;
 | |
|         std::size_t line;
 | |
| 
 | |
|         friend std::ostream& operator << (std::ostream& os, SourceLineInfo const& info);
 | |
|     };
 | |
| 
 | |
| 
 | |
|     // Bring in operator<< from global namespace into Catch namespace
 | |
|     // This is necessary because the overload of operator<< above makes
 | |
|     // lookup stop at namespace Catch
 | |
|     using ::operator<<;
 | |
| 
 | |
|     // Use this in variadic streaming macros to allow
 | |
|     //    >> +StreamEndStop
 | |
|     // as well as
 | |
|     //    >> stuff +StreamEndStop
 | |
|     struct StreamEndStop {
 | |
|         StringRef operator+() const {
 | |
|             return StringRef();
 | |
|         }
 | |
| 
 | |
|         template<typename T>
 | |
|         friend T const& operator + ( T const& value, StreamEndStop ) {
 | |
|             return value;
 | |
|         }
 | |
|     };
 | |
| }
 | |
| 
 | |
| #define CATCH_INTERNAL_LINEINFO \
 | |
|     ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) )
 | |
| 
 | |
| #endif // TWOBLUECUBES_CATCH_COMMON_H_INCLUDED
 | |
| 
 |