1*0241637cSTim Northover // RUN: %clang_cc1 -fsyntax-only -verify %s 2*0241637cSTim Northover 3*0241637cSTim Northover template<typename T> void take(T); 4*0241637cSTim Northover func(float Real,_Complex float Complex)5*0241637cSTim Northovervoid func(float Real, _Complex float Complex) { 6*0241637cSTim Northover Real += Complex; // expected-error {{assigning to 'float' from incompatible type '_Complex float'}} 7*0241637cSTim Northover Real += (float)Complex; 8*0241637cSTim Northover 9*0241637cSTim Northover Real = Complex; // expected-error {{implicit conversion from '_Complex float' to 'float' is not permitted in C++}} 10*0241637cSTim Northover Real = (float)Complex; 11*0241637cSTim Northover 12*0241637cSTim Northover take<float>(Complex); // expected-error {{implicit conversion from '_Complex float' to 'float' is not permitted in C++}} 13*0241637cSTim Northover take<double>(1.0i); // expected-error {{implicit conversion from '_Complex double' to 'double' is not permitted in C++}} 14*0241637cSTim Northover take<_Complex float>(Complex); 15*0241637cSTim Northover 16*0241637cSTim Northover // Conversion to bool doesn't actually discard the imaginary part. 17*0241637cSTim Northover take<bool>(Complex); 18*0241637cSTim Northover } 19