| // RUN: %check_clang_tidy %s zircon-fbl-move %t |
| |
| // CHECK-FIXES: #include <utility> |
| |
| namespace fbl { |
| |
| template <typename T> |
| struct remove_reference { |
| using type = T; |
| }; |
| |
| template <typename T> |
| struct remove_reference<T&> { |
| using type = T; |
| }; |
| |
| template <typename T> |
| struct remove_reference<T&&> { |
| using type = T; |
| }; |
| |
| template <typename T> |
| typename remove_reference<T>::type&& move(T&& t) { |
| return static_cast<typename remove_reference<T>::type&&>(t); |
| } |
| |
| template <typename T> |
| T&& forward(typename remove_reference<T>::type& t) { |
| return static_cast<T&&>(t); |
| } |
| |
| template <typename T> |
| T&& forward(typename remove_reference<T>::type&& t) { |
| return static_cast<T&&>(t); |
| } |
| |
| } // namespace fbl |
| |
| namespace std { |
| |
| template <class _Tp> struct remove_reference {typedef _Tp type;}; |
| template <class _Tp> struct remove_reference<_Tp&> {typedef _Tp type;}; |
| |
| template <class T> T&& forward(typename remove_reference<T>::type& t) {} |
| template <class T> T&& forward(typename remove_reference<T>::type&& t) {} |
| template <class T> typename remove_reference<T>::type&& move(T&&) {} |
| |
| } // namespace std |
| |
| #define MOVE(i) fbl::move(i); fbl::forward<int>(i); |
| // CHECK-NOTES: [[@LINE-1]]:17: warning: fbl::move is deprecated, use std::move instead |
| // CHECK-NOTES: [[@LINE-2]]:31: warning: fbl::forward is deprecated, use std::forward instead |
| // CHECK-FIXES: #define MOVE(i) std::move(i); std::forward<int>(i); |
| |
| int main() { |
| int i = 0; |
| fbl::move(i); |
| // CHECK-NOTES: [[@LINE-1]]:3: warning: fbl::move is deprecated, use std::move instead |
| // CHECK-FIXES: std::move(i) |
| |
| fbl::forward<int>(i); |
| // CHECK-NOTES: [[@LINE-1]]:3: warning: fbl::forward is deprecated, use std::forward instead |
| // CHECK-FIXES: std::forward<int>(i) |
| |
| int j = 0; |
| std::move(j); |
| std::forward<int>(j); |
| |
| int k = 0; |
| MOVE(k); |
| } |