diff options
Diffstat (limited to '')
-rw-r--r-- | tools/clang-tidy/test/bugprone-use-after-move.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/clang-tidy/test/bugprone-use-after-move.cpp b/tools/clang-tidy/test/bugprone-use-after-move.cpp new file mode 100644 index 0000000000..f90a8700d6 --- /dev/null +++ b/tools/clang-tidy/test/bugprone-use-after-move.cpp @@ -0,0 +1,62 @@ +namespace std { +typedef unsigned size_t; + +template <typename T> +struct unique_ptr { + unique_ptr(); + T *get() const; + explicit operator bool() const; + void reset(T *ptr); + T &operator*() const; + T *operator->() const; + T& operator[](size_t i) const; +}; + +template <typename> +struct remove_reference; + +template <typename _Tp> +struct remove_reference { + typedef _Tp type; +}; + +template <typename _Tp> +struct remove_reference<_Tp &> { + typedef _Tp type; +}; + +template <typename _Tp> +struct remove_reference<_Tp &&> { + typedef _Tp type; +}; + +template <typename _Tp> +constexpr typename std::remove_reference<_Tp>::type &&move(_Tp &&__t) noexcept { + return static_cast<typename remove_reference<_Tp>::type &&>(__t); +} +} + +class A { +public: + A(); + A(const A &); + A(A &&); + + A &operator=(const A &); + A &operator=(A &&); + + void foo() const; + int getInt() const; + + operator bool() const; + + int i; +}; + +void func() { + std::unique_ptr<A> ptr; + std::move(ptr); + ptr.get(); + static_cast<bool>(ptr); + *ptr; +} |