// RUN: %clang_cc1 -std=c++1z -verify -Wno-unused %s
;
;
;
;
; // expected-note 1+{{declar}}
Noncopyable
Indestructible ;
Incomplete ; // expected-note 1+{{here}}
void
Noncopyable
Noncopyable nc1 = ;
Noncopyable nc2 = ;
Noncopyable nc3 = ; // expected-error {{deleted constructor}}
Noncopyable ;
Noncopyable nc5 = ;
Noncopyable nc6;
NoncopyableAggr nca1 = NoncopyableAggr;
NoncopyableAggr nca2 = NoncopyableAggr;
NoncopyableAggr nca3 = NoncopyableAggr;
; // expected-note 1+{{candidate}}
Noncopyable conv1 = Convert<Noncopyable>;
Noncopyable ;
Noncopyable conv3 = ;
Noncopyable conv4;
Noncopyable ref_conv1 = Convert<Noncopyable&>; // expected-error {{deleted constructor}}
Noncopyable ; // expected-error {{deleted constructor}}
Noncopyable ref_conv3 = ; // expected-error {{deleted constructor}}
Noncopyable ref_conv4; // expected-error {{deleted constructor}}
Noncopyable derived_conv1 = Convert<Derived>; // expected-error {{deleted constructor}}
Noncopyable ; // expected-error {{deleted constructor}}
Noncopyable derived_conv3 = ; // expected-error {{deleted constructor}}
Noncopyable derived_conv4; // expected-error {{deleted constructor}}
NoncopyableAggr nc_aggr1 = Convert<NoncopyableAggr>;
NoncopyableAggr ;
NoncopyableAggr nc_aggr3 = ; // expected-error {{no viable conversion}}
NoncopyableAggr nc_aggr4; // expected-error {{no viable conversion}}
NoncopyableAggr nc_aggr5 = Convert<Noncopyable>; // expected-error {{no viable}}
NoncopyableAggr ; // expected-error {{no matching constructor}}
NoncopyableAggr nc_aggr7 = ;
NoncopyableAggr nc_aggr8;
void
;
Noncopyable cf1 = ConversionFunction<Noncopyable>;
Noncopyable cf2 = ConversionFunction<Noncopyable&&>; // expected-error {{deleted}}
Noncopyable cf3 = ConversionFunction<const volatile Noncopyable>;
const volatile Noncopyable cf4 = ConversionFunction<Noncopyable>;
Noncopyable cf5 = ConversionFunction<Derived>; // expected-error {{deleted}}
;
// FIXME: DR (no number yet): we still get a copy for base or delegating construction.
;
;