]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/experimental/propagate_const/observers/1.cc
1 // { dg-do run { target c++14 } }
2 // { dg-options "-fdelete-null-pointer-checks" }
4 // Copyright (C) 2015-2020 Free Software Foundation, Inc.
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING3. If not see
19 // <http://www.gnu.org/licenses/>.
21 #include <experimental/propagate_const>
22 #include <testsuite_hooks.h>
24 using std::experimental::propagate_const
;
30 propagate_const
<int*> xx
{&x
};
32 propagate_const
<int*> xx2
{};
36 propagate_const
<X
*> xx3
{&x3
};
38 VERIFY((*xx3
).x
== 42);
39 VERIFY(xx3
.get() == &x3
);
40 const propagate_const
<X
*> xx4
{&x3
};
42 VERIFY((*xx4
).x
== 42);
43 VERIFY(xx4
.get() == &x3
);
44 static constexpr int x4
{42};
45 constexpr propagate_const
<const int*> xx5
{&x4
};
46 static_assert(bool(xx5
), "");
47 constexpr propagate_const
<const int*> xx6
{};
48 static_assert(!bool(xx6
), "");
50 static constexpr X2 x5
{42};
51 constexpr propagate_const
<const X2
*> xx7
{&x5
};
52 static_assert(xx7
->x
== 42, "");
53 static_assert((*xx7
).x
== 42, "");
54 static_assert(xx7
.get() == &x5
, "");
58 int f() const {return 666;}
61 propagate_const
<X3
*> xx9
{&xx8
};
62 const propagate_const
<X3
*> xx10
{&xx8
};
63 VERIFY(xx9
->f() == 42);
64 VERIFY(xx10
->f() == 666);