PR c++/86728 - C variadic generic lambda.
[official-gcc.git] / gcc / testsuite / g++.dg / opt / pr50747-2_0.C
blob26f423af631b86eca96b32fb25d2aa86f844d1a5
1 // { dg-do compile }
2 // { dg-require-effective-target lto }
3 // { dg-options "-w -fpermissive -fno-implicit-templates -flto" }
5 namespace std {
6     typedef long unsigned int size_t;
7     template<typename _Alloc>     class allocator;
8     template<class _CharT>     struct char_traits;
9     template<typename _CharT, typename _Traits = char_traits<_CharT> >     class basic_ostream;
10     template<typename _CharT, typename _Traits = char_traits<_CharT>,     typename _Alloc = allocator<_CharT> >     class basic_ostringstream;
12 extern "C++" {
13     namespace std {
14         class exception   {
15         };
16     };
18 namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
19     template<typename _Tp>     class new_allocator     {
20     };
22 namespace std __attribute__ ((__visibility__ ("default"))) {
23     template<typename _Tp>     class allocator: public __gnu_cxx::new_allocator<_Tp>     {
24     public:       typedef size_t size_type;
25                   template<typename _Tp1>         struct rebind         {
26                       typedef allocator<_Tp1> other;
27                   };
28     };
29     template<typename _CharT, typename _Traits, typename _Alloc>     class basic_string     {
30         typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type;
31         typedef typename _CharT_alloc_type::size_type size_type;
32     private:       struct _Rep_base       {
33                    };
34                    struct _Rep : _Rep_base       {
35                        _CharT*  _M_refdata() throw()  {
36                        }
37                    };
38                    struct _Alloc_hider : _Alloc       {
39                        _Alloc_hider(_CharT* __dat, const _Alloc& __a)  : _Alloc(__a), _M_p(__dat) {
40                        }
41                        _CharT* _M_p;
42                    };
43     private:       mutable _Alloc_hider _M_dataplus;
44                    static _Rep&       _S_empty_rep()       {
45                    }
46     public:       basic_string()       : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) {
47                   }
48                   template<class _InputIterator>         basic_string(_InputIterator __beg, _InputIterator __end,        const _Alloc& __a = _Alloc());
49                   static _CharT*       _S_construct(size_type __req, _CharT __c, const _Alloc& __a);
50     };
51     template<typename _CharT, typename _Traits, typename _Alloc>     inline basic_ostream<_CharT, _Traits>&     operator<<(basic_ostream<_CharT, _Traits>& __os,         const basic_string<_CharT, _Traits, _Alloc>& __str)     {
52     }
53     template<typename _CharT, typename _Traits, typename _Alloc>     template<typename _InputIterator>     basic_string<_CharT, _Traits, _Alloc>::     basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a)     : _M_dataplus(_S_construct(__beg, __end, __a), __a)     {
54     };
55     enum _Ios_Openmode     {
56         _S_app = 1L << 0,       _S_ate = 1L << 1,       _S_bin = 1L << 2,       _S_in = 1L << 3,       _S_out = 1L << 4,       _S_trunc = 1L << 5,       _S_ios_openmode_end = 1L << 16     };
57     class ios_base   {
58     public:     class failure : public exception     {
59                 };
60                 typedef _Ios_Openmode openmode;
61                 static const openmode in = _S_in;
62                 static const openmode out = _S_out;
63     };
64     template<typename _CharT, typename _Traits>     class basic_streambuf     {
65     public:       typedef _CharT char_type;
66                   char_type*       egptr() const {
67                   }
68                   char_type*       pbase() const {
69                   }
70                   char_type*       pptr() const {
71                   }
72     };
73     template<typename _CharT, typename _Traits>     class basic_ios : public ios_base     {
74     };
75     template<typename _CharT, typename _Traits>     class basic_ostream : virtual public basic_ios<_CharT, _Traits>     {
76     };
77     template<typename _CharT, typename _Traits, typename _Alloc>     class basic_stringbuf : public basic_streambuf<_CharT, _Traits>     {
78     public:       typedef _CharT char_type;
79                   typedef _Traits traits_type;
80                   typedef basic_streambuf<char_type, traits_type> __streambuf_type;
81                   typedef basic_string<char_type, _Traits, _Alloc> __string_type;
82     protected:       ios_base::openmode _M_mode;
83                      __string_type _M_string;
84     public:       explicit       basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)       : __streambuf_type(), _M_mode(__mode), _M_string()       {
85                   }
86                   __string_type       str() const       {
87                       __string_type __ret;
88                       if (this->pptr())    {
89                           if (this->pptr() > this->egptr())        __ret = __string_type(this->pbase(), this->pptr());
90                       }
91                   }
92     };
93     template <typename _CharT, typename _Traits, typename _Alloc>     class basic_ostringstream : public basic_ostream<_CharT, _Traits>     {
94     public:       typedef _CharT char_type;
95                   typedef _Traits traits_type;
96                   typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
97                   typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
98                   typedef basic_ostream<char_type, traits_type> __ostream_type;
99     private:       __stringbuf_type _M_stringbuf;
100     public:       explicit       basic_ostringstream(ios_base::openmode __mode = ios_base::out)       : __ostream_type(), _M_stringbuf(__mode | ios_base::out)       {
101                   }
102                    __string_type       str() const       {
103                        return _M_stringbuf.str();
104                    }
105     };
106     template<typename _Tp> class complex;
107     template<typename _Tp, typename _CharT, class _Traits>     basic_ostream<_CharT, _Traits>&     operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)     {
108         basic_ostringstream<_CharT, _Traits> __s;
109         return __os << __s.str();
110     };
111     template     basic_ostream<wchar_t, char_traits<wchar_t> >&     operator<<(basic_ostream<wchar_t, char_traits<wchar_t> >&,                const complex<long double>&);