Mercurial > hg > CbC > CbC_llvm
view clang/test/CXX/special/class.copy/p8-cxx11.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// RUN: %clang_cc1 -std=c++11 %s -verify // expected-no-diagnostics // C++98 [class.copy]p5 / C++11 [class.copy]p8. // The implicitly-declared copy constructor for a class X will have the form // X::X(const X&) // if [every direct subobject] has a copy constructor whose first parameter is // of type 'const volatile[opt] T &'. Otherwise, it will have the form // X::X(X&) struct ConstCopy { ConstCopy(const ConstCopy &); }; struct NonConstCopy { NonConstCopy(NonConstCopy &); }; struct DeletedConstCopy { DeletedConstCopy(const DeletedConstCopy &) = delete; }; struct DeletedNonConstCopy { DeletedNonConstCopy(DeletedNonConstCopy &) = delete; }; struct ImplicitlyDeletedConstCopy { ImplicitlyDeletedConstCopy(ImplicitlyDeletedConstCopy &&); }; struct A : ConstCopy {}; struct B : NonConstCopy { ConstCopy a; }; struct C : ConstCopy { NonConstCopy a; }; struct D : DeletedConstCopy {}; struct E : DeletedNonConstCopy {}; struct F { ImplicitlyDeletedConstCopy a; }; struct G : virtual B {}; struct Test { friend A::A(const A &); friend B::B(B &); friend C::C(C &); friend D::D(const D &); friend E::E(E &); constexpr friend F::F(const F &); friend G::G(G &); };