| // Copyright (C) 2017-2021 Free Software Foundation, Inc. |
| // |
| // This file is part of the GNU ISO C++ Library. This library is free |
| // software; you can redistribute it and/or modify it under the |
| // terms of the GNU General Public License as published by the |
| // Free Software Foundation; either version 3, or (at your option) |
| // any later version. |
| |
| // This library is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| |
| // You should have received a copy of the GNU General Public License along |
| // with this library; see the file COPYING3. If not see |
| // <http://www.gnu.org/licenses/>. |
| |
| // { dg-do compile } |
| // { dg-add-options no_pch } |
| |
| // Define macros for some common variables names that we must not use for |
| // naming variables, parameters etc. in the library. |
| #define A ( |
| #define B ( |
| #define C ( |
| #define D ( |
| #define E ( |
| #define F ( |
| #define G ( |
| #define H ( |
| #define I ( |
| #define J ( |
| #define K ( |
| #define L ( |
| #define M ( |
| #define N ( |
| #define O ( |
| #define P ( |
| #define Q ( |
| #define R ( |
| #define S ( |
| #define T ( |
| #define U ( |
| #define V ( |
| #define W ( |
| #define X ( |
| #define Y ( |
| #define Z ( |
| #if __cplusplus >= 201103L |
| // <random> defines member functions called a() and b() |
| #else |
| #define a ( |
| #define b ( |
| #endif |
| // <queue> and <stack> defined data members called c |
| #if __cplusplus <= 201703L |
| // <chrono> defines operator""d in C++20 |
| #define d ( |
| // <numbers> defines std::numbers::e in C++20 |
| #define e ( |
| #endif |
| #define f ( |
| #define g ( |
| #if __cplusplus >= 201402L |
| // <chrono> defines operator ""h in C++14 |
| // <complex> defines operator ""i in C++14 |
| #else |
| #define h ( |
| #define i ( |
| #endif |
| #define j ( |
| #if __cplusplus >= 201103L |
| // <random> defines member functions called k() |
| #else |
| #define k ( |
| #endif |
| #define l ( |
| #if __cplusplus >= 201103L |
| // <random> defines member functions called m() and n() |
| #else |
| #define m ( |
| #define n ( |
| #endif |
| #define o ( |
| #if __cplusplus >= 201103L |
| // <random> defines member functions called p() |
| #else |
| #define p ( |
| #endif |
| #define q ( |
| #define r ( |
| #if __cplusplus >= 201103L |
| // <random> defines member functions called s() and t() |
| // <chrono> and <string> define operator ""s in C++14 |
| #else |
| #define s ( |
| #define t ( |
| #endif |
| #define u ( |
| #define v ( |
| #define w ( |
| #define x ( |
| #if __cplusplus <= 201703L |
| // <chrono> defines operator""y in C++20 |
| #define y ( |
| #endif |
| #define z ( |
| |
| #define func ( |
| #define tmp ( |
| #define sz ( |
| |
| #if __cplusplus < 201103L |
| #define uses_allocator ( |
| #endif |
| |
| #if __cplusplus < 201402L |
| // <complex> defines operator""il |
| #define il ( |
| #endif |
| |
| #if __cplusplus < 201703L |
| // <charconv> defines to_chars_result::ptr and to_chars_result::ec |
| #define ec ( |
| #define ptr ( |
| #endif |
| |
| // This clashes with newlib so don't use it. |
| # define __lockable cannot be used as an identifier |
| |
| |
| // Common template parameter names |
| #define OutputIterator OutputIterator is not a reserved name |
| #define InputIterator InputIterator is not a reserved name |
| #define ForwardIterator ForwardIterator is not a reserved name |
| #define BidirectionalIterator BidirectionalIterator is not a reserved name |
| #define RandomAccessIterator RandomAccessIterator is not a reserved name |
| #define RandomAccessOutputIterator RandomAccessOutputIterator is not a reserved name |
| #define RAI RAI is not a reserved name |
| #define RAIter RAIter is not a reserved name |
| #define FwdIter FwdIter is not a reserved name |
| #define OutIter OutIter is not a reserved name |
| #define InIter InIter is not a reserved name |
| |
| #define Alloc Alloc is not a reserved name |
| #define BinaryFunction1 BinaryFunction1 is not a reserved name |
| #define BinaryFunction2 BinaryFunction2 is not a reserved name |
| #define Char Char is not a reserved name |
| #define CharT CharT is not a reserved name |
| #define Cmp Cmp is not a reserved name |
| #define Compare Compare is not a reserved name |
| #define Const_Iterator Const_Iterator is not a reserved name |
| #define Const_Key_Reference Const_Key_Reference is not a reserved name |
| #define Const_Node_Iter Const_Node_Iter is not a reserved name |
| #define Const_Pointer Const_Pointer is not a reserved name |
| #define Const_Reference Const_Reference is not a reserved name |
| #define Data Data is not a reserved name |
| #define DiffType DiffType is not a reserved name |
| #define Eq Eq is not a reserved name |
| #define ExecPolicy ExecPolicy is not a reserved name |
| #define Expected Expected is not a reserved name |
| #define External_Load_Access External_Load_Access is not a reserved name |
| #define External_Size_Access External_Size_Access is not a reserved name |
| #define Fn Fn is not a reserved name |
| #define Function Function is not a reserved name |
| #define Functor Functor is not a reserved name |
| #define Hash Hash is not a reserved name |
| #define H1 H1 is not a reserved name |
| #define H2 H2 is not a reserved name |
| #define Head Head is not a reserved name |
| #define It It is not a reserved name |
| #define Iter Iter is not a reserved name |
| #define Iterator Iterator is not a reserved name |
| #define Key Key is not a reserved name |
| #define Mapped Mapped is not a reserved name |
| #define Node Node is not a reserved name |
| #define Node_iter Node_iter is not a reserved name |
| #define Node_ptr Node_ptr is not a reserved name |
| #define Overflow Overflow is not a reserved name |
| #define Pointer Pointer is not a reserved name |
| #define Policy Policy is not a reserved name |
| #define Pred Pred is not a reserved name |
| #define Ptr Ptr is not a reserved name |
| #define Reference Reference is not a reserved name |
| #define Seq Seq is not a reserved name |
| #define Seq_RAIter Seq_RAIter is not a reserved name |
| #define Series Series is not a reserved name |
| #define Set Set is not a reserved name |
| #define String String is not a reserved name |
| #define Tp Tp is not a reserved name |
| #define Traits Traits is not a reserved name |
| #define Type Type is not a reserved name |
| #define Value Value is not a reserved name |
| #define ValueT ValueT is not a reserved name |
| #define ValueType ValueType is not a reserved name |
| |
| #ifdef _AIX |
| // See https://gcc.gnu.org/ml/libstdc++/2017-03/msg00015.html |
| #undef f |
| #undef r |
| #undef x |
| #undef y |
| // <sys/var.h> defines vario::v |
| #undef v |
| #endif |
| |
| #ifdef __APPLE__ |
| // inttypes.h: extern intmax_t imaxabs(intmax_t j); |
| #undef j |
| #endif |
| |
| #ifdef __hpux__ |
| #undef d |
| #undef r |
| #endif |
| |
| #if defined (__linux__) && defined (__arm__) |
| // <sys/ucontext.h> defines fpregset_t::fpregs::j |
| #undef j |
| #endif |
| |
| #if defined (__linux__) && defined (__powerpc__) |
| // <asm/types.h> defines __vector128::u |
| #undef u |
| #endif |
| |
| #if defined (__linux__) && defined (__sparc__) |
| #undef y |
| #endif |
| |
| #if __has_include(<newlib.h>) |
| // newlib's <sys/cdefs.h> defines __lockable as a macro. |
| #undef __lockable |
| // newlib's <time.h> defines __tzrule_type with these members. |
| #undef d |
| #undef m |
| #undef n |
| #undef s |
| // newlib's <math.h> uses this for parameters |
| #undef x |
| // newlib's <inttypes.h> uses this for parameters |
| #undef j |
| #endif |
| |
| #ifdef __sun__ |
| // <fenv.h> defines these as members of fex_numeric_t |
| #undef l |
| #undef f |
| #undef d |
| #undef q |
| #undef p |
| // See https://gcc.gnu.org/ml/libstdc++/2019-05/msg00175.html |
| #undef ptr |
| #endif |
| |
| #ifdef __VXWORKS__ |
| |
| #include <_vxworks-versions.h> |
| |
| // Some VxWorks 6 or 7 headers are using those. |
| |
| // private/objLibP.h |
| #undef u |
| |
| // arch/ppc/ffs/ArchLib.h |
| #undef i |
| #undef j |
| |
| // math.h |
| #undef x |
| #undef y |
| |
| // stdio.h |
| #undef ptr |
| |
| // VxWorks >= 7 specificities |
| |
| #if _VXWORKS_MAJOR_GE(7) |
| |
| // regs.h regs structure has a field 'r' |
| #undef r |
| |
| #ifndef __RTP__ |
| // in bootLib.h, bootParamCheck has parameters x, a-f |
| #undef a |
| #undef b |
| #undef c |
| #undef d |
| #undef e |
| #undef f |
| #endif // __RTP__ |
| |
| #endif // VxWorks Major >= 7 |
| |
| #endif // __VXWORKS__ |
| |
| #ifdef _WIN32 |
| #undef Value |
| // <stdlib.h> defines _CRT_FLOAT::f |
| #undef f |
| // <stdlib.h> defines _CRT_DOUBLE::x and _LONGDOUBLE::x |
| #undef x |
| // <math.h> defines _complex::x and _complex::y |
| #undef y |
| #endif |
| |
| #include <bits/stdc++.h> |