diff --git a/include/internal/catch_console_colour.hpp b/include/internal/catch_console_colour.hpp index 2505f7bc..4caed07c 100644 --- a/include/internal/catch_console_colour.hpp +++ b/include/internal/catch_console_colour.hpp @@ -54,14 +54,15 @@ namespace Catch { // Use constructed object for RAII guard Colour( Code _colourCode ); + Colour( Colour const& other ); ~Colour(); // Use static method for one-shot changes static void use( Code _colourCode ); private: - Colour( Colour const& other ); static Detail::IColourImpl* impl(); + bool m_moved; }; inline std::ostream& operator << ( std::ostream& os, Colour const& ) { return os; } diff --git a/include/internal/catch_console_colour_impl.hpp b/include/internal/catch_console_colour_impl.hpp index c159dc95..5f215062 100644 --- a/include/internal/catch_console_colour_impl.hpp +++ b/include/internal/catch_console_colour_impl.hpp @@ -149,8 +149,9 @@ namespace Catch { } } - Colour::Colour( Code _colourCode ){ use( _colourCode ); } - Colour::~Colour(){ use( None ); } + Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); } + Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast( _other ).m_moved = true; } + Colour::~Colour(){ if( !m_moved ) use( None ); } void Colour::use( Code _colourCode ) { impl()->use( _colourCode ); }