| // RUN: %clang_cc1 -std=c++11 %s -Wdeprecated-copy -verify |
| // RUN: %clang_cc1 -std=c++11 %s -Wdeprecated-copy-dtor -DDEPRECATED_COPY_DTOR -verify |
| // RUN: %clang_cc1 -std=c++11 %s -Wextra -verify |
| |
| #ifdef DEPRECATED_COPY_DTOR |
| struct A { |
| int *ptr; |
| ~A() { delete ptr; } // expected-warning {{definition of implicit copy constructor for 'A' is deprecated because it has a user-declared destructor}} |
| }; |
| |
| void foo() { |
| A a{}; |
| A b = a; // expected-note {{implicit copy constructor for 'A' first required here}} |
| } |
| #else |
| struct B { |
| B &operator=(const B &); // expected-warning {{definition of implicit copy constructor for 'B' is deprecated because it has a user-declared copy assignment operator}} |
| }; |
| |
| void bar() { |
| B b1, b2(b1); // expected-note {{implicit copy constructor for 'B' first required here}} |
| } |
| #endif |