blob: 7db1030ab20030dd1f5429694b66c2cfc49b4b0c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
// PR c++/120577
// { dg-do compile { target c++20 } }
template <class _Tp> struct optional {
union {
_Tp __val_;
};
template <class... _Args>
constexpr optional(_Args... __args)
: __val_(__args...) {}
};
template <class _Tp, class... _Args>
constexpr optional<_Tp> make_optional(_Args... __args) {
return optional<_Tp>(__args...);
}
struct __non_trivial_if {
constexpr __non_trivial_if() {}
};
struct allocator : __non_trivial_if {};
struct __padding {};
struct __short {
[[__no_unique_address__]] __padding __padding_;
int __data_;
};
struct basic_string {
union {
__short __s;
};
[[__no_unique_address__]] allocator __alloc_;
constexpr basic_string(int, int) {}
};
auto opt = make_optional<basic_string>(4, 'X');
|