Explicitly default smfs when relevant to avoid Wdeprecated-copy-dtor

This commit is contained in:
Martin Hořeňovský 2020-05-11 20:15:58 +02:00
parent 579dcd1a76
commit 03ef6b9f9a
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
9 changed files with 44 additions and 10 deletions

View File

@ -23,6 +23,10 @@ namespace Catch {
virtual void start() = 0;
virtual void finish() = 0;
virtual ~ChronometerConcept(); // = default;
ChronometerConcept() = default;
ChronometerConcept(ChronometerConcept const&) = default;
ChronometerConcept& operator=(ChronometerConcept const&) = default;
};
template <typename Clock>
struct ChronometerModel final : public ChronometerConcept {

View File

@ -42,6 +42,10 @@ namespace Catch {
virtual void call(Chronometer meter) const = 0;
virtual callable* clone() const = 0;
virtual ~callable(); // = default;
callable() = default;
callable(callable const&) = default;
callable& operator=(callable const&) = default;
};
template <typename Fun>
struct model : public callable {

View File

@ -30,6 +30,10 @@ namespace Detail {
template<typename T>
struct IGenerator : GeneratorUntypedBase {
~IGenerator() override = default;
IGenerator() = default;
IGenerator(IGenerator const&) = default;
IGenerator& operator=(IGenerator const&) = default;
// Returns the current element of the generator
//

View File

@ -36,7 +36,7 @@ namespace Catch {
namespace Catch {
IGeneratorTracker::~IGeneratorTracker() {}
IGeneratorTracker::~IGeneratorTracker() = default;
namespace Generators {
@ -48,7 +48,7 @@ namespace Detail {
}
} // end namespace Detail
GeneratorUntypedBase::~GeneratorUntypedBase() {}
GeneratorUntypedBase::~GeneratorUntypedBase() = default;
auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
return getResultCapture().acquireGeneratorTracker( lineInfo );

View File

@ -16,7 +16,13 @@ namespace Catch {
class GeneratorUntypedBase {
public:
GeneratorUntypedBase() = default;
virtual ~GeneratorUntypedBase();
// Generation of copy ops is deprecated (and Clang will complain)
// if there is a user destructor defined
GeneratorUntypedBase(GeneratorUntypedBase const&) = default;
GeneratorUntypedBase& operator=(GeneratorUntypedBase const&) = default;
virtual ~GeneratorUntypedBase(); // = default;
// Attempts to move the generator to the next element
//
// Returns true iff the move succeeded (and a valid element
@ -28,7 +34,7 @@ namespace Catch {
} // namespace Generators
struct IGeneratorTracker {
virtual ~IGeneratorTracker();
virtual ~IGeneratorTracker(); // = default;
virtual auto hasGenerator() const -> bool = 0;
virtual auto getGenerator() const -> Generators::GeneratorBasePtr const& = 0;
virtual void setGenerator( Generators::GeneratorBasePtr&& generator ) = 0;

View File

@ -43,9 +43,13 @@ namespace Catch {
m_result( result )
{}
ITransientExpression() = default;
ITransientExpression(ITransientExpression const&) = default;
ITransientExpression& operator=(ITransientExpression const&) = default;
// We don't actually need a virtual destructor, but many static analysers
// complain if it's not here :-(
virtual ~ITransientExpression();
virtual ~ITransientExpression(); // = default;
bool m_isBinaryExpression;
bool m_result;

View File

@ -17,8 +17,13 @@ namespace Matchers {
class MatcherUntypedBase {
public:
MatcherUntypedBase() = default;
MatcherUntypedBase(MatcherUntypedBase const&) = default;
MatcherUntypedBase(MatcherUntypedBase&&) = default;
MatcherUntypedBase& operator = (MatcherUntypedBase const&) = delete;
MatcherUntypedBase& operator = (MatcherUntypedBase&&) = delete;
std::string toString() const;
protected:

View File

@ -18,7 +18,14 @@
namespace Catch {
namespace Matchers {
struct MatcherGenericBase : MatcherUntypedBase {
MatcherGenericBase() = default;
virtual ~MatcherGenericBase(); // = default;
MatcherGenericBase(MatcherGenericBase&) = default;
MatcherGenericBase(MatcherGenericBase&&) = default;
MatcherGenericBase& operator=(MatcherGenericBase const&) = delete;
MatcherGenericBase& operator=(MatcherGenericBase&&) = delete;
};

View File

@ -893,11 +893,11 @@ namespace { namespace MatchersTests {
struct ThrowOnCopyOrMoveMatcher : Catch::Matchers::MatcherGenericBase {
ThrowOnCopyOrMoveMatcher() = default;
[[noreturn]]
ThrowOnCopyOrMoveMatcher(ThrowOnCopyOrMoveMatcher const&) {
ThrowOnCopyOrMoveMatcher(ThrowOnCopyOrMoveMatcher const&): Catch::Matchers::MatcherGenericBase() {
throw MatcherWasMovedOrCopied();
}
[[noreturn]]
ThrowOnCopyOrMoveMatcher(ThrowOnCopyOrMoveMatcher &&) {
ThrowOnCopyOrMoveMatcher(ThrowOnCopyOrMoveMatcher &&): Catch::Matchers::MatcherGenericBase() {
throw MatcherWasMovedOrCopied();
}
ThrowOnCopyOrMoveMatcher& operator=(ThrowOnCopyOrMoveMatcher const&) {