| Alexander Kornienko | 7ed89bc | 2015-05-27 14:24:11 +0000 | [diff] [blame] | 1 | //===--- NoexceptMoveConstructorCheck.h - clang-tidy-------------*- C++ -*-===// | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 2 | // | 
|  | 3 | //                     The LLVM Compiler Infrastructure | 
|  | 4 | // | 
|  | 5 | // This file is distributed under the University of Illinois Open Source | 
|  | 6 | // License. See LICENSE.TXT for details. | 
|  | 7 | // | 
|  | 8 | //===----------------------------------------------------------------------===// | 
|  | 9 |  | 
| Alexander Kornienko | 7ed89bc | 2015-05-27 14:24:11 +0000 | [diff] [blame] | 10 | #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_NOEXCEPTMOVECONSTRUCTORCHECK_H | 
|  | 11 | #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_NOEXCEPTMOVECONSTRUCTORCHECK_H | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 12 |  | 
|  | 13 | #include "../ClangTidy.h" | 
|  | 14 |  | 
|  | 15 | namespace clang { | 
|  | 16 | namespace tidy { | 
|  | 17 |  | 
| Alexander Kornienko | f8ed0a8 | 2015-08-27 18:01:58 +0000 | [diff] [blame^] | 18 | /// The check flags user-defined move constructors and assignment operators not | 
|  | 19 | /// marked with `noexcept` or marked with `noexcept(expr)` where `expr` | 
|  | 20 | /// evaluates to `false` (but is not a `false` literal itself). | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 21 | /// | 
|  | 22 | /// Move constructors of all the types used with STL containers, for example, | 
| Alexander Kornienko | f8ed0a8 | 2015-08-27 18:01:58 +0000 | [diff] [blame^] | 23 | /// need to be declared `noexcept`. Otherwise STL will choose copy constructors | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 24 | /// instead. The same is valid for move assignment operations. | 
| Alexander Kornienko | 7ed89bc | 2015-05-27 14:24:11 +0000 | [diff] [blame] | 25 | class NoexceptMoveConstructorCheck : public ClangTidyCheck { | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 26 | public: | 
| Alexander Kornienko | 7ed89bc | 2015-05-27 14:24:11 +0000 | [diff] [blame] | 27 | NoexceptMoveConstructorCheck(StringRef Name, ClangTidyContext *Context) | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 28 | : ClangTidyCheck(Name, Context) {} | 
|  | 29 | void registerMatchers(ast_matchers::MatchFinder *Finder) override; | 
|  | 30 | void check(const ast_matchers::MatchFinder::MatchResult &Result) override; | 
|  | 31 | }; | 
|  | 32 |  | 
|  | 33 | } // namespace tidy | 
|  | 34 | } // namespace clang | 
|  | 35 |  | 
| Alexander Kornienko | 7ed89bc | 2015-05-27 14:24:11 +0000 | [diff] [blame] | 36 | #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_NOEXCEPTMOVECONSTRUCTORCHECK_H | 
| Alexander Kornienko | 3396a8b | 2015-05-22 10:31:17 +0000 | [diff] [blame] | 37 |  |