xref: /llvm-project/clang/test/SemaCXX/imaginary-constants.cpp (revision 9710338a5699a48b26807693371d277b1acb3387)
1*9710338aSTim Northover // RUN: %clang_cc1 -fsyntax-only -verify %s -include %s -std=gnu++98
2*9710338aSTim Northover // RUN: %clang_cc1 -fsyntax-only -verify %s -include %s -std=c++11
3*9710338aSTim Northover // RUN: %clang_cc1 -fsyntax-only -verify %s -include %s -std=c++14 -DCXX14=1
4*9710338aSTim Northover 
5*9710338aSTim Northover // expected-no-diagnostics
6*9710338aSTim Northover 
7*9710338aSTim Northover #ifndef HEADER
8*9710338aSTim Northover #define HEADER
9*9710338aSTim Northover 
10*9710338aSTim Northover _Complex int val1 = 2i;
11*9710338aSTim Northover _Complex long val2 = 2il;
12*9710338aSTim Northover _Complex long long val3 = 2ill;
13*9710338aSTim Northover _Complex float val4 = 2.0if;
14*9710338aSTim Northover _Complex double val5 = 2.0i;
15*9710338aSTim Northover _Complex long double val6 = 2.0il;
16*9710338aSTim Northover 
17*9710338aSTim Northover #if CXX14
18*9710338aSTim Northover 
19*9710338aSTim Northover #pragma clang system_header
20*9710338aSTim Northover 
21*9710338aSTim Northover namespace std {
22*9710338aSTim Northover   template<typename T> struct complex {};
23*9710338aSTim Northover   complex<float> operator""if(unsigned long long);
24*9710338aSTim Northover   complex<float> operator""if(long double);
25*9710338aSTim Northover 
26*9710338aSTim Northover   complex<double> operator"" i(unsigned long long);
27*9710338aSTim Northover   complex<double> operator"" i(long double);
28*9710338aSTim Northover 
29*9710338aSTim Northover   complex<long double> operator"" il(unsigned long long);
30*9710338aSTim Northover   complex<long double> operator"" il(long double);
31*9710338aSTim Northover }
32*9710338aSTim Northover 
33*9710338aSTim Northover using namespace std;
34*9710338aSTim Northover 
35*9710338aSTim Northover complex<float> f1 = 2.0if;
36*9710338aSTim Northover complex<float> f2 = 2if;
37*9710338aSTim Northover complex<double> d1 = 2.0i;
38*9710338aSTim Northover complex<double> d2 = 2i;
39*9710338aSTim Northover complex<long double> l1 = 2.0il;
40*9710338aSTim Northover complex<long double> l2 = 2il;
41*9710338aSTim Northover 
42*9710338aSTim Northover #endif
43*9710338aSTim Northover 
44*9710338aSTim Northover #endif
45