OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
| 11 #include <type_traits> |
| 12 |
11 #include "webrtc/base/bind.h" | 13 #include "webrtc/base/bind.h" |
12 #include "webrtc/base/gunit.h" | 14 #include "webrtc/base/gunit.h" |
13 | 15 |
14 #include "webrtc/base/refcount.h" | 16 #include "webrtc/base/refcount.h" |
15 | 17 |
16 namespace rtc { | 18 namespace rtc { |
17 | 19 |
18 namespace { | 20 namespace { |
19 | 21 |
20 struct LifeTimeCheck; | 22 struct LifeTimeCheck; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 }; | 66 }; |
65 | 67 |
66 int Return42() { return 42; } | 68 int Return42() { return 42; } |
67 int Negate(int a) { return -a; } | 69 int Negate(int a) { return -a; } |
68 int Multiply(int a, int b) { return a * b; } | 70 int Multiply(int a, int b) { return a * b; } |
69 | 71 |
70 } // namespace | 72 } // namespace |
71 | 73 |
72 // Try to catch any problem with scoped_refptr type deduction in rtc::Bind at | 74 // Try to catch any problem with scoped_refptr type deduction in rtc::Bind at |
73 // compile time. | 75 // compile time. |
74 static_assert( | |
75 is_same< | |
76 rtc::remove_reference<const scoped_refptr<RefCountInterface>&>::type, | |
77 const scoped_refptr<RefCountInterface>>::value, | |
78 "const scoped_refptr& should be captured by value"); | |
79 | |
80 static_assert(is_same<rtc::remove_reference<const scoped_refptr<F>&>::type, | |
81 const scoped_refptr<F>>::value, | |
82 "const scoped_refptr& should be captured by value"); | |
83 | |
84 static_assert( | |
85 is_same<rtc::remove_reference<const int&>::type, const int>::value, | |
86 "const int& should be captured as const int"); | |
87 | |
88 static_assert(is_same<rtc::remove_reference<const F&>::type, const F>::value, | |
89 "const F& should be captured as const F"); | |
90 | |
91 static_assert(is_same<rtc::remove_reference<F&>::type, F>::value, | |
92 "F& should be captured as F"); | |
93 | |
94 #define EXPECT_IS_CAPTURED_AS_PTR(T) \ | 76 #define EXPECT_IS_CAPTURED_AS_PTR(T) \ |
95 static_assert(is_same<detail::PointerType<T>::type, T*>::value, \ | 77 static_assert(is_same<detail::PointerType<T>::type, T*>::value, \ |
96 "PointerType") | 78 "PointerType") |
97 #define EXPECT_IS_CAPTURED_AS_SCOPED_REFPTR(T) \ | 79 #define EXPECT_IS_CAPTURED_AS_SCOPED_REFPTR(T) \ |
98 static_assert( \ | 80 static_assert( \ |
99 is_same<detail::PointerType<T>::type, scoped_refptr<T>>::value, \ | 81 is_same<detail::PointerType<T>::type, scoped_refptr<T>>::value, \ |
100 "PointerType") | 82 "PointerType") |
101 | 83 |
102 EXPECT_IS_CAPTURED_AS_PTR(void); | 84 EXPECT_IS_CAPTURED_AS_PTR(void); |
103 EXPECT_IS_CAPTURED_AS_PTR(int); | 85 EXPECT_IS_CAPTURED_AS_PTR(int); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 // modified to a non-reference capture. | 211 // modified to a non-reference capture. |
230 TEST(BindTest, RefArgument) { | 212 TEST(BindTest, RefArgument) { |
231 const int x = 42; | 213 const int x = 42; |
232 EXPECT_EQ(&x, Ref(x)); | 214 EXPECT_EQ(&x, Ref(x)); |
233 // Bind() should make a copy of |x|, i.e. the pointers should be different. | 215 // Bind() should make a copy of |x|, i.e. the pointers should be different. |
234 auto functor = Bind(&Ref, x); | 216 auto functor = Bind(&Ref, x); |
235 EXPECT_NE(&x, functor()); | 217 EXPECT_NE(&x, functor()); |
236 } | 218 } |
237 | 219 |
238 } // namespace rtc | 220 } // namespace rtc |
OLD | NEW |