Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add AllowMissingMoveFunctionsWhenCopyIsDeleted flag to cppcoreguideli…
…nes-special-member-functions The flag allows classes to don't define move operations when copy operations are explicitly deleted. This flag is related to Google C++ Style Guide https://google.github.io/styleguide/cppguide.html#Copyable_Movable_Types
- Loading branch information
1 parent
132f25b
commit 2f20417
Showing
4 changed files
with
114 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
...rs/cppcoreguidelines-special-member-functions-allow-missing-move-when-copy-is-deleted.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
// RUN: %check_clang_tidy %s cppcoreguidelines-special-member-functions %t -- -config="{CheckOptions: [{key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted, value: 1}]}" -- | ||
|
||
class DefinesEverything { | ||
DefinesEverything(const DefinesEverything &); | ||
DefinesEverything(DefinesEverything &&); | ||
DefinesEverything &operator=(const DefinesEverything &); | ||
DefinesEverything &operator=(DefinesEverything &&); | ||
~DefinesEverything(); | ||
}; | ||
|
||
class DefinesNothing { | ||
}; | ||
|
||
class DeletedCopyCtorAndOperator { | ||
~DeletedCopyCtorAndOperator() = default; | ||
DeletedCopyCtorAndOperator(const DeletedCopyCtorAndOperator &) = delete; | ||
DeletedCopyCtorAndOperator &operator=(const DeletedCopyCtorAndOperator &) = delete; | ||
}; | ||
|
||
// CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'DefaultedCopyCtorAndOperator' defines a default destructor, a copy constructor and a copy assignment operator but does not define a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] | ||
class DefaultedCopyCtorAndOperator { | ||
~DefaultedCopyCtorAndOperator() = default; | ||
DefaultedCopyCtorAndOperator(const DefaultedCopyCtorAndOperator &) = default; | ||
DefaultedCopyCtorAndOperator &operator=(const DefaultedCopyCtorAndOperator &) = default; | ||
}; | ||
|
||
// CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'DefinedCopyCtorAndOperator' defines a default destructor, a copy constructor and a copy assignment operator but does not define a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] | ||
class DefinedCopyCtorAndOperator { | ||
~DefinedCopyCtorAndOperator() = default; | ||
DefinedCopyCtorAndOperator(const DefinedCopyCtorAndOperator &); | ||
DefinedCopyCtorAndOperator &operator=(const DefinedCopyCtorAndOperator &); | ||
}; | ||
|
||
// CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'MissingCopyCtor' defines a default destructor and a copy assignment operator but does not define a copy constructor, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] | ||
class MissingCopyCtor { | ||
~MissingCopyCtor() = default; | ||
MissingCopyCtor &operator=(const MissingCopyCtor &) = delete; | ||
}; | ||
|
||
// CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'MissingCopyOperator' defines a default destructor and a copy constructor but does not define a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] | ||
class MissingCopyOperator { | ||
~MissingCopyOperator() = default; | ||
MissingCopyOperator(const MissingCopyOperator &) = delete; | ||
}; | ||
|
||
// CHECK-MESSAGES: [[@LINE+1]]:7: warning: class 'MissingAll' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions] | ||
class MissingAll { | ||
~MissingAll() = default; | ||
}; |