mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 16:42:00 +01:00 
			
		
		
		
	All C++11 toggles are now removed. What is left is either platform specific (POSIX_SIGNALS, WINDOWS_SEH), or possibly still needed (USE_COUNTER). If current CLion is compatible with `__COUNTER__`, then we should also force `__COUNTER__` usage. Changed * CATCH_AUTO_PTR -> std::unique_ptr * CATCH_OVERRIDE -> override * CATCH_NULL -> nullptr * CATCH_NOEXCEPT -> noexcept * CATCH_NOEXCEPT_IS -> noexcept Removed * CATCH_CONFIG_CPP11_UNIQUE_PTR * CATCH_CONFIG_CPP11_SHUFFLE * CATCH_CONFIG_CPP11_TYPE_TRAITS * CATCH_CONFIG_CPP11_OVERRIDE * CATCH_CONFIG_CPP11_LONG_LONG * CATCH_CONFIG_CPP11_TUPLE * CATCH_CONFIG_CPP11_IS_ENUM * CATCH_CONFIG_CPP11_GENERATED_METHODS * CATCH_CONFIG_CPP11_NOEXCEPT * CATCH_CONFIG_CPP11_NULLPTR * CATCH_CONFIG_VARIADIC_MACROS
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 *  Created by Phil on 20/04/2011.
 | 
						|
 *  Copyright 2011 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_INTERFACES_EXCEPTION_H_INCLUDED
 | 
						|
#define TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED
 | 
						|
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include "catch_interfaces_registry_hub.h"
 | 
						|
 | 
						|
namespace Catch {
 | 
						|
 | 
						|
    typedef std::string(*exceptionTranslateFunction)();
 | 
						|
 | 
						|
    struct IExceptionTranslator;
 | 
						|
    typedef std::vector<const IExceptionTranslator*> ExceptionTranslators;
 | 
						|
 | 
						|
    struct IExceptionTranslator {
 | 
						|
        virtual ~IExceptionTranslator();
 | 
						|
        virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0;
 | 
						|
    };
 | 
						|
 | 
						|
    struct IExceptionTranslatorRegistry {
 | 
						|
        virtual ~IExceptionTranslatorRegistry();
 | 
						|
 | 
						|
        virtual std::string translateActiveException() const = 0;
 | 
						|
    };
 | 
						|
 | 
						|
    class ExceptionTranslatorRegistrar {
 | 
						|
        template<typename T>
 | 
						|
        class ExceptionTranslator : public IExceptionTranslator {
 | 
						|
        public:
 | 
						|
 | 
						|
            ExceptionTranslator( std::string(*translateFunction)( T& ) )
 | 
						|
            : m_translateFunction( translateFunction )
 | 
						|
            {}
 | 
						|
 | 
						|
            virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override {
 | 
						|
                try {
 | 
						|
                    if( it == itEnd )
 | 
						|
                        throw;
 | 
						|
                    else
 | 
						|
                        return (*it)->translate( it+1, itEnd );
 | 
						|
                }
 | 
						|
                catch( T& ex ) {
 | 
						|
                    return m_translateFunction( ex );
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        protected:
 | 
						|
            std::string(*m_translateFunction)( T& );
 | 
						|
        };
 | 
						|
 | 
						|
    public:
 | 
						|
        template<typename T>
 | 
						|
        ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) {
 | 
						|
            getMutableRegistryHub().registerTranslator
 | 
						|
                ( new ExceptionTranslator<T>( translateFunction ) );
 | 
						|
        }
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \
 | 
						|
    static std::string translatorName( signature ); \
 | 
						|
    namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); }\
 | 
						|
    static std::string translatorName( signature )
 | 
						|
 | 
						|
#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
 | 
						|
 | 
						|
#endif // TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED
 |