1859b6227694033dd6eaf3991a2b80877a406c382Richard Smith// RUN: %clang_cc1 -std=c++1y -verify %s 2859b6227694033dd6eaf3991a2b80877a406c382Richard Smith 3859b6227694033dd6eaf3991a2b80877a406c382Richard Smithint operator""ms(unsigned long long); // expected-warning {{reserved}} 4859b6227694033dd6eaf3991a2b80877a406c382Richard Smithfloat operator""ms(long double); // expected-warning {{reserved}} 5859b6227694033dd6eaf3991a2b80877a406c382Richard Smith 69a17677bb8a332e873137187aba91f64d3fd16a0Richard Smithint operator""_foo(unsigned long long); 79a17677bb8a332e873137187aba91f64d3fd16a0Richard Smith 8859b6227694033dd6eaf3991a2b80877a406c382Richard Smithnamespace integral { 9859b6227694033dd6eaf3991a2b80877a406c382Richard Smith static_assert(1'2'3 == 12'3, ""); 10859b6227694033dd6eaf3991a2b80877a406c382Richard Smith static_assert(1'000'000 == 0xf'4240, ""); 11859b6227694033dd6eaf3991a2b80877a406c382Richard Smith static_assert(0'004'000'000 == 0x10'0000, ""); 12859b6227694033dd6eaf3991a2b80877a406c382Richard Smith static_assert(0b0101'0100 == 0x54, ""); 13859b6227694033dd6eaf3991a2b80877a406c382Richard Smith 14859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int a = 123'; //'; // expected-error {{expected ';'}} 15859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int b = 0'xff; // expected-error {{digit separator cannot appear at end of digit sequence}} expected-error {{suffix 'xff' on integer}} 16859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int c = 0x'ff; // expected-error {{suffix 'x'ff' on integer}} 17859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int d = 0'1234; // ok, octal 18859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int e = 0'b1010; // expected-error {{digit 'b' in octal constant}} 19859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int f = 0b'1010; // expected-error {{invalid digit 'b' in octal}} 20859b6227694033dd6eaf3991a2b80877a406c382Richard Smith int g = 123'ms; // expected-error {{digit separator cannot appear at end of digit sequence}} 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int h = 0x1e+1; // expected-error {{invalid suffix '+1' on integer constant}} 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int i = 0x1'e+1; // ok, 'e+' is not recognized after a digit separator 23859b6227694033dd6eaf3991a2b80877a406c382Richard Smith 249a17677bb8a332e873137187aba91f64d3fd16a0Richard Smith int z = 0'123'_foo; //'; // expected-error {{cannot appear at end of digit seq}} 25859b6227694033dd6eaf3991a2b80877a406c382Richard Smith} 26859b6227694033dd6eaf3991a2b80877a406c382Richard Smith 27859b6227694033dd6eaf3991a2b80877a406c382Richard Smithnamespace floating { 28859b6227694033dd6eaf3991a2b80877a406c382Richard Smith static_assert(0'123.456'7 == 123.4567, ""); 29859b6227694033dd6eaf3991a2b80877a406c382Richard Smith static_assert(1e1'0 == 10'000'000'000, ""); 30859b6227694033dd6eaf3991a2b80877a406c382Richard Smith 31859b6227694033dd6eaf3991a2b80877a406c382Richard Smith float a = 1'e1; // expected-error {{digit separator cannot appear at end of digit sequence}} 32859b6227694033dd6eaf3991a2b80877a406c382Richard Smith float b = 1'0e1; 33859b6227694033dd6eaf3991a2b80877a406c382Richard Smith float c = 1.'0e1; // expected-error {{digit separator cannot appear at start of digit sequence}} 34859b6227694033dd6eaf3991a2b80877a406c382Richard Smith float d = 1.0'e1; // expected-error {{digit separator cannot appear at end of digit sequence}} 35859b6227694033dd6eaf3991a2b80877a406c382Richard Smith float e = 1e'1; // expected-error {{digit separator cannot appear at start of digit sequence}} 36859b6227694033dd6eaf3991a2b80877a406c382Richard Smith float f = 1e1'ms; // expected-error {{digit separator cannot appear at end of digit sequence}} 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float g = 0.'0; // expected-error {{digit separator cannot appear at start of digit sequence}} 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float h = .'0; // '; // expected-error {{expected expression}}, lexed as . followed by character literal 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float i = 0x.'0p0; // expected-error {{digit separator cannot appear at start of digit sequence}} 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float j = 0x'0.0p0; // expected-error {{invalid suffix 'x'0.0p0'}} 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float k = 0x0'.0p0; // '; // expected-error {{expected ';'}} 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float l = 0x0.'0p0; // expected-error {{digit separator cannot appear at start of digit sequence}} 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float m = 0x0.0'p0; // expected-error {{digit separator cannot appear at end of digit sequence}} 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float n = 0x0.0p'0; // expected-error {{digit separator cannot appear at start of digit sequence}} 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float o = 0x0.0p0'ms; // expected-error {{digit separator cannot appear at end of digit sequence}} 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float p = 0'e1; // expected-error {{digit separator cannot appear at end of digit sequence}} 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float q = 0'0e1; 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float r = 0.'0e1; // expected-error {{digit separator cannot appear at start of digit sequence}} 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float s = 0.0'e1; // expected-error {{digit separator cannot appear at end of digit sequence}} 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float t = 0.0e'1; // expected-error {{digit separator cannot appear at start of digit sequence}} 51859b6227694033dd6eaf3991a2b80877a406c382Richard Smith} 529a17677bb8a332e873137187aba91f64d3fd16a0Richard Smith 539a17677bb8a332e873137187aba91f64d3fd16a0Richard Smith#line 123'456 549a17677bb8a332e873137187aba91f64d3fd16a0Richard Smithstatic_assert(__LINE__ == 123456, ""); 5565ea687b8abbfc892e8d91bba477999b0379b07bRichard Smith 5665ea687b8abbfc892e8d91bba477999b0379b07bRichard Smith// x has value 0 in C++11 and 34 in C++1y. 5765ea687b8abbfc892e8d91bba477999b0379b07bRichard Smith#define M(x, ...) __VA_ARGS__ 5865ea687b8abbfc892e8d91bba477999b0379b07bRichard Smithconstexpr int x = { M(1'2,3'4) }; 5965ea687b8abbfc892e8d91bba477999b0379b07bRichard Smithstatic_assert(x == 34, ""); 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace UCNs { 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // UCNs can appear before digit separators but not after. 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int a = 0\u1234'5; // expected-error {{invalid suffix '\u1234'5' on integer constant}} 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int b = 0'\u12345; // '; // expected-error {{expected ';'}} 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines constexpr int c {M(0\u1234'0,0'1)}; 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines constexpr int d {M(00'\u1234,0'1)}; 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static_assert(c == 1, ""); 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static_assert(d == 0, ""); 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace UTF8 { 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // extended characters can appear before digit separators but not after. 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int a = 0ሴ'5; // expected-error {{invalid suffix 'ሴ'5' on integer constant}} 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines int b = 0'ሴ5; // '; // expected-error {{expected ';'}} 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines constexpr int c {M(0ሴ'0,0'1)}; 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines constexpr int d {M(00'ሴ,0'1)}; 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static_assert(c == 1, ""); 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static_assert(d == 0, ""); 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 80