1 | /* |
2 | * Copyright 2020 Xavier Claessens |
3 | * |
4 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Lesser General Public |
6 | * License as published by the Free Software Foundation; either |
7 | * version 2.1 of the License, or (at your option) any later version. |
8 | * |
9 | * This library is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | * Lesser General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU Lesser General Public |
15 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
16 | */ |
17 | |
18 | #include <glib.h> |
19 | |
20 | typedef struct |
21 | { |
22 | int dummy; |
23 | } MyObject; |
24 | |
25 | static void |
26 | test_typeof (void) |
27 | { |
28 | #if __cplusplus >= 201103L |
29 | // Test that with C++11 we don't get those kind of errors: |
30 | // error: invalid conversion from ‘gpointer’ {aka ‘void*’} to ‘MyObject*’ [-fpermissive] |
31 | MyObject *obj = g_rc_box_new0 (MyObject); |
32 | MyObject *obj2 = g_rc_box_acquire (obj); |
33 | g_assert_true (obj2 == obj); |
34 | |
35 | MyObject *obj3 = g_atomic_pointer_get (&obj2); |
36 | g_assert_true (obj3 == obj); |
37 | |
38 | MyObject *obj4 = nullptr; |
39 | g_atomic_pointer_set (&obj4, obj3); |
40 | g_assert_true (obj4 == obj); |
41 | |
42 | MyObject *obj5 = nullptr; |
43 | g_atomic_pointer_compare_and_exchange (&obj5, nullptr, obj4); |
44 | g_assert_true (obj5 == obj); |
45 | |
46 | MyObject *obj6 = g_steal_pointer (&obj5); |
47 | g_assert_true (obj6 == obj); |
48 | |
49 | g_clear_pointer (&obj6, g_rc_box_release); |
50 | g_rc_box_release (mem_block: obj); |
51 | #else |
52 | g_test_skip ("This test requires C++11 compiler" ); |
53 | #endif |
54 | } |
55 | |
56 | int |
57 | main (int argc, char *argv[]) |
58 | { |
59 | g_test_init (argc: &argc, argv: &argv, NULL); |
60 | |
61 | g_test_add_func (testpath: "/C++/typeof" , test_func: test_typeof); |
62 | |
63 | return g_test_run (); |
64 | } |
65 | |