// { dg-options "-g -O0" }
-// { dg-do run }
-// { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } }
+// { dg-do run { target c++11 } }
-// Copyright (C) 2014-2019 Free Software Foundation, Inc.
+// Copyright (C) 2014-2024 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
namespace std
{
- template<typename T, typename U>
- struct tuple
+ template<typename T>
+ struct _Head_base : T
+ { };
+
+ template<typename T>
+ struct _Head_base<T*>
{
- T _M_head_impl;
+ T* _M_head_impl;
};
+ template<unsigned long, typename ...> struct _Tuple_impl;
+
+ template<typename T, typename U>
+ struct _Tuple_impl<0, T, U> : _Tuple_impl<1, U>, _Head_base<T>
+ { };
+
+ template<typename U>
+ struct _Tuple_impl<1, U> : _Head_base<U>
+ { };
+
+ template<typename T, typename U>
+ struct tuple : _Tuple_impl<0, T, U>
+ { };
+
template<typename T> struct default_delete { };
template<typename T, typename D = default_delete<T>>
{
unique_ptr(T* p) { _M_t._M_head_impl = p; }
- tuple<T*, D> _M_t;
+ using __tuple_type = tuple<T*, D>;
+
+ __tuple_type _M_t;
};
// Old representation of std::optional, before GCC 9
using std::optional;
optional<int> o;
-// { dg-final { note-test o {std::optional<int> [no contained value]} } }
+// { dg-final { note-test o {std::optional [no contained value]} } }
optional<bool> ob{false};
-// { dg-final { note-test ob {std::optional<bool> = {[contained value] = false}} } }
+// { dg-final { note-test ob {std::optional = {[contained value] = false}} } }
optional<int> oi{5};
-// { dg-final { note-test oi {std::optional<int> = {[contained value] = 5}} } }
+// { dg-final { note-test oi {std::optional = {[contained value] = 5}} } }
optional<void*> op{nullptr};
-// { dg-final { note-test op {std::optional<void *> = {[contained value] = 0x0}} } }
+// { dg-final { note-test op {std::optional = {[contained value] = 0x0}} } }
__builtin_puts("");
return 0; // Mark SPOT