| // RUN: %clang_cc1 -std=c++11 -fsyntax-only -fobjc-arc -verify -fblocks -Wpessimizing-move -Wredundant-move %s |
| // definitions for std::move |
| template <class T> struct remove_reference { typedef T type; }; |
| template <class T> struct remove_reference<T&> { typedef T type; }; |
| template <class T> struct remove_reference<T&&> { typedef T type; }; |
| template <class T> typename remove_reference<T>::type &&move(T &&t); |
| MoveOnly(MoveOnly &&) = default; // expected-note 2 {{copy constructor is implicitly deleted}} |
| MoveOnly &operator=(MoveOnly &&) = default; |
| MoveOnly temp2 = temp; // expected-error {{call to implicitly-deleted copy constructor of 'MoveOnly'}} |
| MoveOnly temp3 = std::move(temp); // ok |
| return temp; // expected-error {{call to implicitly-deleted copy constructor of 'MoveOnly'}} |
| MoveOnly dontWarnOnMove() { |
| return std::move(temp); // ok |
| class MoveOnlySub : public MoveOnly {}; |
| MoveOnly dontWarnOnMoveSubclass() { |
| __block MoveOnlySub temp; |
| return std::move(temp); // ok |