xref: /aosp_15_r20/external/clang/test/CXX/special/class.copy/p28-cxx11.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -std=c++98 %s -fsyntax-only
2*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 %s -verify
3*67e74705SXin Li 
4*67e74705SXin Li // In C++11, we must perform overload resolution to determine which function is
5*67e74705SXin Li // called by a defaulted assignment operator, and the selected operator might
6*67e74705SXin Li // not be a copy or move assignment (it might be a specialization of a templated
7*67e74705SXin Li // 'operator=', for instance).
8*67e74705SXin Li struct A {
9*67e74705SXin Li   A &operator=(const A &);
10*67e74705SXin Li 
11*67e74705SXin Li   template<typename T>
operator =A12*67e74705SXin Li   A &operator=(T &&) { return T::error; } // expected-error {{no member named 'error' in 'A'}}
13*67e74705SXin Li };
14*67e74705SXin Li 
15*67e74705SXin Li struct B : A {
16*67e74705SXin Li   B &operator=(B &&);
17*67e74705SXin Li };
18*67e74705SXin Li 
19*67e74705SXin Li B &B::operator=(B &&) = default; // expected-note {{here}}
20