annotate gcc/testsuite/g++.dg/warn/Wuninitialized-6.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do compile } */
kono
parents:
diff changeset
2 /* { dg-options "-Wuninitialized -O2" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 namespace std {
kono
parents:
diff changeset
5 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
6 }
kono
parents:
diff changeset
7 extern "C++" {
kono
parents:
diff changeset
8 inline void* operator new(std::size_t, void* __p) throw() {
kono
parents:
diff changeset
9 return __p;
kono
parents:
diff changeset
10 }
kono
parents:
diff changeset
11 }
kono
parents:
diff changeset
12 namespace boost{
kono
parents:
diff changeset
13 __extension__ typedef long long long_long_type;
kono
parents:
diff changeset
14 }
kono
parents:
diff changeset
15 namespace mpl_ {
kono
parents:
diff changeset
16 namespace aux {
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18 }
kono
parents:
diff changeset
19 namespace boost {
kono
parents:
diff changeset
20 namespace mpl {
kono
parents:
diff changeset
21 using namespace mpl_;
kono
parents:
diff changeset
22 }
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24 namespace mpl_ {
kono
parents:
diff changeset
25 struct integral_c_tag {
kono
parents:
diff changeset
26 };
kono
parents:
diff changeset
27 template< int N > struct int_ {
kono
parents:
diff changeset
28 };
kono
parents:
diff changeset
29 }
kono
parents:
diff changeset
30 namespace boost {
kono
parents:
diff changeset
31 namespace mpl {
kono
parents:
diff changeset
32 }
kono
parents:
diff changeset
33 }
kono
parents:
diff changeset
34 namespace mpl_ {
kono
parents:
diff changeset
35 template< bool C_ > struct bool_;
kono
parents:
diff changeset
36 typedef bool_<true> true_;
kono
parents:
diff changeset
37 typedef bool_<false> false_;
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39 namespace mpl_ {
kono
parents:
diff changeset
40 template< bool C_ > struct bool_ {
kono
parents:
diff changeset
41 static const bool value = C_;
kono
parents:
diff changeset
42 };
kono
parents:
diff changeset
43 template< typename T, T N > struct integral_c {
kono
parents:
diff changeset
44 static const T value = N;
kono
parents:
diff changeset
45 };
kono
parents:
diff changeset
46 }
kono
parents:
diff changeset
47 namespace boost{
kono
parents:
diff changeset
48 template <class T, T val> struct integral_constant : public mpl::integral_c<T, val> {
kono
parents:
diff changeset
49 };
kono
parents:
diff changeset
50 template<> struct integral_constant<bool,false> : public mpl::false_ {
kono
parents:
diff changeset
51 typedef integral_constant<bool,false> type;
kono
parents:
diff changeset
52 };
kono
parents:
diff changeset
53 template< typename T > struct is_lvalue_reference : ::boost::integral_constant<bool,false> {
kono
parents:
diff changeset
54 };
kono
parents:
diff changeset
55 template< typename T > struct is_rvalue_reference : ::boost::integral_constant<bool,false> {
kono
parents:
diff changeset
56 };
kono
parents:
diff changeset
57 namespace type_traits {
kono
parents:
diff changeset
58 template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false> struct ice_or;
kono
parents:
diff changeset
59 template <> struct ice_or<false, false, false, false, false, false, false> {
kono
parents:
diff changeset
60 static const bool value = false;
kono
parents:
diff changeset
61 };
kono
parents:
diff changeset
62 }
kono
parents:
diff changeset
63 }
kono
parents:
diff changeset
64 namespace boost {
kono
parents:
diff changeset
65 namespace detail {
kono
parents:
diff changeset
66 template <typename T> struct is_reference_impl {
kono
parents:
diff changeset
67 static const bool value = (::boost::type_traits::ice_or< ::boost::is_lvalue_reference<T>::value, ::boost::is_rvalue_reference<T>::value >::value) ;
kono
parents:
diff changeset
68 };
kono
parents:
diff changeset
69 }
kono
parents:
diff changeset
70 template< typename T > struct is_reference : ::boost::integral_constant<bool,::boost::detail::is_reference_impl<T>::value> {
kono
parents:
diff changeset
71 };
kono
parents:
diff changeset
72 namespace detail {
kono
parents:
diff changeset
73 template< typename T > struct alignment_of_impl {
kono
parents:
diff changeset
74 static const std::size_t value = __alignof__(T);
kono
parents:
diff changeset
75 };
kono
parents:
diff changeset
76 }
kono
parents:
diff changeset
77 template< typename T > struct alignment_of : ::boost::integral_constant<std::size_t,::boost::detail::alignment_of_impl<T>::value> {
kono
parents:
diff changeset
78 };
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80 namespace mpl_ {
kono
parents:
diff changeset
81 struct na {
kono
parents:
diff changeset
82 };
kono
parents:
diff changeset
83 }
kono
parents:
diff changeset
84 namespace boost {
kono
parents:
diff changeset
85 namespace mpl {
kono
parents:
diff changeset
86 }
kono
parents:
diff changeset
87 }
kono
parents:
diff changeset
88 namespace boost {
kono
parents:
diff changeset
89 namespace mpl {
kono
parents:
diff changeset
90 template< bool C , typename T1 , typename T2 > struct if_c {
kono
parents:
diff changeset
91 typedef T1 type;
kono
parents:
diff changeset
92 };
kono
parents:
diff changeset
93 template< typename T1 , typename T2 > struct if_c<false,T1,T2> {
kono
parents:
diff changeset
94 typedef T2 type;
kono
parents:
diff changeset
95 };
kono
parents:
diff changeset
96 template< typename T1 = na , typename T2 = na , typename T3 = na > struct if_ {
kono
parents:
diff changeset
97 private: typedef if_c< static_cast<bool>(T1::value) , T2 , T3 > almost_type_;
kono
parents:
diff changeset
98 public: typedef typename almost_type_::type type;
kono
parents:
diff changeset
99 };
kono
parents:
diff changeset
100 }
kono
parents:
diff changeset
101 }
kono
parents:
diff changeset
102 namespace boost{
kono
parents:
diff changeset
103 template <bool x> struct STATIC_ASSERTION_FAILURE;
kono
parents:
diff changeset
104 template <> struct STATIC_ASSERTION_FAILURE<true> {
kono
parents:
diff changeset
105 };
kono
parents:
diff changeset
106 template<int x> struct static_assert_test{
kono
parents:
diff changeset
107 };
kono
parents:
diff changeset
108 namespace detail {
kono
parents:
diff changeset
109 class alignment_dummy;
kono
parents:
diff changeset
110 typedef void (*function_ptr)();
kono
parents:
diff changeset
111 typedef int (alignment_dummy::*member_ptr);
kono
parents:
diff changeset
112 typedef int (alignment_dummy::*member_function_ptr)();
kono
parents:
diff changeset
113 template <bool found, std::size_t target, class TestType> struct lower_alignment_helper {
kono
parents:
diff changeset
114 typedef char type;
kono
parents:
diff changeset
115 enum { value = true };
kono
parents:
diff changeset
116 };
kono
parents:
diff changeset
117 template <std::size_t target, class TestType> struct lower_alignment_helper<false,target,TestType> {
kono
parents:
diff changeset
118 enum { value = (alignment_of<TestType>::value == target) };
kono
parents:
diff changeset
119 typedef typename mpl::if_c<value, TestType, char>::type type;
kono
parents:
diff changeset
120 };
kono
parents:
diff changeset
121 template <typename T> struct has_one_T {
kono
parents:
diff changeset
122 T data;
kono
parents:
diff changeset
123 };
kono
parents:
diff changeset
124 template <std::size_t target> union lower_alignment {
kono
parents:
diff changeset
125 enum { found0 = false };
kono
parents:
diff changeset
126 typename lower_alignment_helper< found0,target,char >::type t0;
kono
parents:
diff changeset
127 enum { found1 = lower_alignment_helper<found0,target,char >::value };
kono
parents:
diff changeset
128 typename lower_alignment_helper< found1,target,short >::type t1;
kono
parents:
diff changeset
129 enum { found2 = lower_alignment_helper<found1,target,short >::value };
kono
parents:
diff changeset
130 typename lower_alignment_helper< found2,target,int >::type t2;
kono
parents:
diff changeset
131 enum { found3 = lower_alignment_helper<found2,target,int >::value };
kono
parents:
diff changeset
132 typename lower_alignment_helper< found3,target,long >::type t3;
kono
parents:
diff changeset
133 enum { found4 = lower_alignment_helper<found3,target,long >::value };
kono
parents:
diff changeset
134 typename lower_alignment_helper< found4,target,::boost::long_long_type >::type t4;
kono
parents:
diff changeset
135 enum { found5 = lower_alignment_helper<found4,target,::boost::long_long_type >::value };
kono
parents:
diff changeset
136 typename lower_alignment_helper< found5,target,float >::type t5;
kono
parents:
diff changeset
137 enum { found6 = lower_alignment_helper<found5,target,float >::value };
kono
parents:
diff changeset
138 typename lower_alignment_helper< found6,target,double >::type t6;
kono
parents:
diff changeset
139 enum { found7 = lower_alignment_helper<found6,target,double >::value };
kono
parents:
diff changeset
140 typename lower_alignment_helper< found7,target,long double >::type t7;
kono
parents:
diff changeset
141 enum { found8 = lower_alignment_helper<found7,target,long double >::value };
kono
parents:
diff changeset
142 typename lower_alignment_helper< found8,target,void* >::type t8;
kono
parents:
diff changeset
143 enum { found9 = lower_alignment_helper<found8,target,void* >::value };
kono
parents:
diff changeset
144 typename lower_alignment_helper< found9,target,function_ptr >::type t9;
kono
parents:
diff changeset
145 enum { found10 = lower_alignment_helper<found9,target,function_ptr >::value };
kono
parents:
diff changeset
146 typename lower_alignment_helper< found10,target,member_ptr >::type t10;
kono
parents:
diff changeset
147 enum { found11 = lower_alignment_helper<found10,target,member_ptr >::value };
kono
parents:
diff changeset
148 typename lower_alignment_helper< found11,target,member_function_ptr >::type t11;
kono
parents:
diff changeset
149 enum { found12 = lower_alignment_helper<found11,target,member_function_ptr >::value };
kono
parents:
diff changeset
150 typename lower_alignment_helper< found12,target,boost::detail::has_one_T< char > >::type t12;
kono
parents:
diff changeset
151 enum { found13 = lower_alignment_helper<found12,target,boost::detail::has_one_T< char > >::value };
kono
parents:
diff changeset
152 typename lower_alignment_helper< found13,target,boost::detail::has_one_T< short > >::type t13;
kono
parents:
diff changeset
153 enum { found14 = lower_alignment_helper<found13,target,boost::detail::has_one_T< short > >::value };
kono
parents:
diff changeset
154 typename lower_alignment_helper< found14,target,boost::detail::has_one_T< int > >::type t14;
kono
parents:
diff changeset
155 enum { found15 = lower_alignment_helper<found14,target,boost::detail::has_one_T< int > >::value };
kono
parents:
diff changeset
156 typename lower_alignment_helper< found15,target,boost::detail::has_one_T< long > >::type t15;
kono
parents:
diff changeset
157 enum { found16 = lower_alignment_helper<found15,target,boost::detail::has_one_T< long > >::value };
kono
parents:
diff changeset
158 typename lower_alignment_helper< found16,target,boost::detail::has_one_T< ::boost::long_long_type > >::type t16;
kono
parents:
diff changeset
159 enum { found17 = lower_alignment_helper<found16,target,boost::detail::has_one_T< ::boost::long_long_type > >::value };
kono
parents:
diff changeset
160 typename lower_alignment_helper< found17,target,boost::detail::has_one_T< float > >::type t17;
kono
parents:
diff changeset
161 enum { found18 = lower_alignment_helper<found17,target,boost::detail::has_one_T< float > >::value };
kono
parents:
diff changeset
162 typename lower_alignment_helper< found18,target,boost::detail::has_one_T< double > >::type t18;
kono
parents:
diff changeset
163 enum { found19 = lower_alignment_helper<found18,target,boost::detail::has_one_T< double > >::value };
kono
parents:
diff changeset
164 typename lower_alignment_helper< found19,target,boost::detail::has_one_T< long double > >::type t19;
kono
parents:
diff changeset
165 enum { found20 = lower_alignment_helper<found19,target,boost::detail::has_one_T< long double > >::value };
kono
parents:
diff changeset
166 typename lower_alignment_helper< found20,target,boost::detail::has_one_T< void* > >::type t20;
kono
parents:
diff changeset
167 enum { found21 = lower_alignment_helper<found20,target,boost::detail::has_one_T< void* > >::value };
kono
parents:
diff changeset
168 typename lower_alignment_helper< found21,target,boost::detail::has_one_T< function_ptr > >::type t21;
kono
parents:
diff changeset
169 enum { found22 = lower_alignment_helper<found21,target,boost::detail::has_one_T< function_ptr > >::value };
kono
parents:
diff changeset
170 typename lower_alignment_helper< found22,target,boost::detail::has_one_T< member_ptr > >::type t22;
kono
parents:
diff changeset
171 enum { found23 = lower_alignment_helper<found22,target,boost::detail::has_one_T< member_ptr > >::value };
kono
parents:
diff changeset
172 typename lower_alignment_helper< found23,target,boost::detail::has_one_T< member_function_ptr > >::type t23;
kono
parents:
diff changeset
173 enum { found24 = lower_alignment_helper<found23,target,boost::detail::has_one_T< member_function_ptr > >::value };
kono
parents:
diff changeset
174 };
kono
parents:
diff changeset
175 union max_align {
kono
parents:
diff changeset
176 };
kono
parents:
diff changeset
177 template<std::size_t TAlign, std::size_t Align> struct is_aligned {
kono
parents:
diff changeset
178 static const bool value = (TAlign >= Align) & (TAlign % Align == 0) ;
kono
parents:
diff changeset
179 };
kono
parents:
diff changeset
180 template <std::size_t Align> class type_with_alignment_imp {
kono
parents:
diff changeset
181 typedef ::boost::detail::lower_alignment<Align> t1;
kono
parents:
diff changeset
182 typedef typename mpl::if_c< ::boost::detail::is_aligned< ::boost::alignment_of<t1>::value,Align >::value , t1 , ::boost::detail::max_align >::type align_t;
kono
parents:
diff changeset
183 static const std::size_t found = alignment_of<align_t>::value;
kono
parents:
diff changeset
184 typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< ((found >= Align) == 0 ? false : true) >)> boost_static_assert_typedef_206;
kono
parents:
diff changeset
185 typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< ((found % Align == 0) == 0 ? false : true) >)> boost_static_assert_typedef_207;
kono
parents:
diff changeset
186 public: typedef align_t type;
kono
parents:
diff changeset
187 };
kono
parents:
diff changeset
188 }
kono
parents:
diff changeset
189 template <std::size_t Align> class type_with_alignment : public ::boost::detail::type_with_alignment_imp<Align> {
kono
parents:
diff changeset
190 };
kono
parents:
diff changeset
191 }
kono
parents:
diff changeset
192 namespace boost {
kono
parents:
diff changeset
193 namespace detail{
kono
parents:
diff changeset
194 }
kono
parents:
diff changeset
195 template< typename T > struct remove_reference {
kono
parents:
diff changeset
196 };
kono
parents:
diff changeset
197 }
kono
parents:
diff changeset
198 namespace boost {
kono
parents:
diff changeset
199 namespace mpl {
kono
parents:
diff changeset
200 namespace aux {
kono
parents:
diff changeset
201 template< typename T > struct nested_type_wknd : T::type { };
kono
parents:
diff changeset
202 }
kono
parents:
diff changeset
203 }
kono
parents:
diff changeset
204 namespace mpl {
kono
parents:
diff changeset
205 namespace aux {
kono
parents:
diff changeset
206 template< long C_ > struct not_impl : bool_<!C_> { };
kono
parents:
diff changeset
207 }
kono
parents:
diff changeset
208 template< typename T = na > struct not_ : aux::not_impl< ::boost::mpl::aux::nested_type_wknd<T>::value > {
kono
parents:
diff changeset
209 };
kono
parents:
diff changeset
210 }
kono
parents:
diff changeset
211 namespace detail {
kono
parents:
diff changeset
212 template <typename T> struct make_reference_content {
kono
parents:
diff changeset
213 typedef T type;
kono
parents:
diff changeset
214 };
kono
parents:
diff changeset
215 }
kono
parents:
diff changeset
216 namespace detail {
kono
parents:
diff changeset
217 struct none_helper{
kono
parents:
diff changeset
218 };
kono
parents:
diff changeset
219 }
kono
parents:
diff changeset
220 typedef int detail::none_helper::*none_t ;
kono
parents:
diff changeset
221 }
kono
parents:
diff changeset
222 namespace boost_optional_detail {
kono
parents:
diff changeset
223 template <class T, class Factory> inline void construct(Factory const& factory, void* address) {
kono
parents:
diff changeset
224 }
kono
parents:
diff changeset
225 }
kono
parents:
diff changeset
226 namespace boost {
kono
parents:
diff changeset
227 class in_place_factory_base ;
kono
parents:
diff changeset
228 class typed_in_place_factory_base ;
kono
parents:
diff changeset
229 namespace optional_detail {
kono
parents:
diff changeset
230 template <class T> class aligned_storage {
kono
parents:
diff changeset
231 union __attribute__((may_alias)) dummy_u { char data[ sizeof(T) ]; typename type_with_alignment< ::boost::alignment_of<T>::value >::type aligner_; }
kono
parents:
diff changeset
232 dummy_ ;
kono
parents:
diff changeset
233 public: void const* address() const { return &dummy_; }
kono
parents:
diff changeset
234 void * address() { return &dummy_; }
kono
parents:
diff changeset
235 }
kono
parents:
diff changeset
236 ;
kono
parents:
diff changeset
237 template<class T> struct types_when_isnt_ref {
kono
parents:
diff changeset
238 typedef T const& reference_const_type ;
kono
parents:
diff changeset
239 typedef T & reference_type ;
kono
parents:
diff changeset
240 typedef T const* pointer_const_type ;
kono
parents:
diff changeset
241 typedef T * pointer_type ;
kono
parents:
diff changeset
242 typedef T const& argument_type ;
kono
parents:
diff changeset
243 }
kono
parents:
diff changeset
244 ;
kono
parents:
diff changeset
245 template<class T> struct types_when_is_ref {
kono
parents:
diff changeset
246 typedef typename remove_reference<T>::type raw_type ;
kono
parents:
diff changeset
247 typedef raw_type& reference_const_type ;
kono
parents:
diff changeset
248 typedef raw_type& argument_type ;
kono
parents:
diff changeset
249 }
kono
parents:
diff changeset
250 ;
kono
parents:
diff changeset
251 struct optional_tag {
kono
parents:
diff changeset
252 }
kono
parents:
diff changeset
253 ;
kono
parents:
diff changeset
254 template<class T> struct optional_base : public optional_tag {
kono
parents:
diff changeset
255 typedef typename ::boost::detail::make_reference_content<T>::type internal_type ;
kono
parents:
diff changeset
256 typedef aligned_storage<internal_type> storage_type ;
kono
parents:
diff changeset
257 typedef types_when_isnt_ref<T> types_when_not_ref ;
kono
parents:
diff changeset
258 typedef types_when_is_ref<T> types_when_ref ;
kono
parents:
diff changeset
259 typedef optional_base<T> this_type ;
kono
parents:
diff changeset
260 typedef T value_type ;
kono
parents:
diff changeset
261 typedef mpl::true_ is_reference_tag ;
kono
parents:
diff changeset
262 typedef mpl::false_ is_not_reference_tag ;
kono
parents:
diff changeset
263 typedef typename is_reference<T>::type is_reference_predicate ;
kono
parents:
diff changeset
264 typedef typename mpl::if_<is_reference_predicate,types_when_ref,types_when_not_ref>::type types ;
kono
parents:
diff changeset
265 typedef bool (this_type::*unspecified_bool_type)() const;
kono
parents:
diff changeset
266 typedef typename types::reference_type reference_type ;
kono
parents:
diff changeset
267 typedef typename types::reference_const_type reference_const_type ;
kono
parents:
diff changeset
268 typedef typename types::pointer_type pointer_type ;
kono
parents:
diff changeset
269 typedef typename types::pointer_const_type pointer_const_type ;
kono
parents:
diff changeset
270 typedef typename types::argument_type argument_type ;
kono
parents:
diff changeset
271 optional_base() : m_initialized(false) {}
kono
parents:
diff changeset
272 optional_base ( argument_type val ) : m_initialized(false) { construct(val); }
kono
parents:
diff changeset
273 optional_base ( bool cond, argument_type val ) : m_initialized(false) { if ( cond ) construct(val); }
kono
parents:
diff changeset
274 optional_base ( optional_base const& rhs ) : m_initialized(false) { if ( rhs.is_initialized() ) construct(rhs.get_impl()); }
kono
parents:
diff changeset
275 pointer_const_type get_ptr() const { return m_initialized ? get_ptr_impl() : 0 ; }
kono
parents:
diff changeset
276 pointer_type get_ptr() { return m_initialized ? get_ptr_impl() : 0 ; }
kono
parents:
diff changeset
277 bool is_initialized() const { return m_initialized ; }
kono
parents:
diff changeset
278 void construct ( argument_type val ) { new (m_storage.address()) internal_type(val) ; m_initialized = true ; }
kono
parents:
diff changeset
279 template<class Expr> void construct ( Expr const& factory, in_place_factory_base const* ) { typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< ((::boost::mpl::not_<is_reference_predicate>::value) == 0 ? false : true) >)> boost_static_assert_typedef_355 ; boost_optional_detail::construct<value_type>(factory, m_storage.address()); m_initialized = true ; }
kono
parents:
diff changeset
280 template<class Expr> void construct ( Expr const& factory, typed_in_place_factory_base const* ) { typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< ((::boost::mpl::not_<is_reference_predicate>::value) == 0 ? false : true) >)> boost_static_assert_typedef_364 ; factory.apply(m_storage.address()) ; m_initialized = true ; }
kono
parents:
diff changeset
281 void destroy() { }
kono
parents:
diff changeset
282 unspecified_bool_type safe_bool() const { return m_initialized ? &this_type::is_initialized : 0 ; }
kono
parents:
diff changeset
283 reference_const_type get_impl() const { return dereference(get_object(), is_reference_predicate() ) ; }
kono
parents:
diff changeset
284 reference_type get_impl() { return dereference(get_object(), is_reference_predicate() ) ; }
kono
parents:
diff changeset
285 pointer_const_type get_ptr_impl() const { return cast_ptr(get_object(), is_reference_predicate() ) ; }
kono
parents:
diff changeset
286 pointer_type get_ptr_impl() { return cast_ptr(get_object(), is_reference_predicate() ) ; }
kono
parents:
diff changeset
287 internal_type const* get_object() const { union { void const* ap_pvoid; internal_type const* as_ptype; } caster = { m_storage.address() }; return caster.as_ptype; }
kono
parents:
diff changeset
288 internal_type * get_object() { union { void* ap_pvoid; internal_type* as_ptype; } caster = { m_storage.address() }; return caster.as_ptype; }
kono
parents:
diff changeset
289 reference_const_type dereference( internal_type const* p, is_not_reference_tag ) const { return *p ; }
kono
parents:
diff changeset
290 pointer_type cast_ptr( internal_type * p, is_reference_tag ) { return &p->get() ; }
kono
parents:
diff changeset
291 bool m_initialized ;
kono
parents:
diff changeset
292 storage_type m_storage ;
kono
parents:
diff changeset
293 }
kono
parents:
diff changeset
294 ;
kono
parents:
diff changeset
295 }
kono
parents:
diff changeset
296 template<class T> class optional : public optional_detail::optional_base<T> {
kono
parents:
diff changeset
297 typedef optional_detail::optional_base<T> base ;
kono
parents:
diff changeset
298 public : typedef optional<T> this_type ;
kono
parents:
diff changeset
299 typedef typename base::reference_const_type reference_const_type ;
kono
parents:
diff changeset
300 reference_const_type get() const {
kono
parents:
diff changeset
301 (static_cast<void> (0)) ;
kono
parents:
diff changeset
302 return this->get_impl();
kono
parents:
diff changeset
303 }
kono
parents:
diff changeset
304 reference_const_type operator *() const {
kono
parents:
diff changeset
305 return this->get() ;
kono
parents:
diff changeset
306 }
kono
parents:
diff changeset
307 bool operator!() const {
kono
parents:
diff changeset
308 return !this->is_initialized() ;
kono
parents:
diff changeset
309 }
kono
parents:
diff changeset
310 }
kono
parents:
diff changeset
311 ;
kono
parents:
diff changeset
312 template<class OptionalPointee> inline bool equal_pointees2 ( OptionalPointee const& x, OptionalPointee const& y ) {
kono
parents:
diff changeset
313 return (!x) != (!y) ? false : ( !x ? true : (*x) == (*y) ) ;
kono
parents:
diff changeset
314 }
kono
parents:
diff changeset
315 template<class T> inline bool operator == ( optional<T> const& x, optional<T> const& y ) {
kono
parents:
diff changeset
316 return equal_pointees2(x,y);
kono
parents:
diff changeset
317 }
kono
parents:
diff changeset
318 template<class T> inline bool operator != ( optional<T> const& x, optional<T> const& y ) {
kono
parents:
diff changeset
319 return !( x == y ) ;
kono
parents:
diff changeset
320 }
kono
parents:
diff changeset
321 }
kono
parents:
diff changeset
322 ::boost::optional< std::size_t > getitem();
kono
parents:
diff changeset
323 class BAR {
kono
parents:
diff changeset
324 public: int FOO();
kono
parents:
diff changeset
325 private: ::boost::optional< std::size_t > m_aHoveredItem;
kono
parents:
diff changeset
326 };
kono
parents:
diff changeset
327 int BAR::FOO() {
kono
parents:
diff changeset
328 ::boost::optional< std::size_t > aOldItem(getitem());
kono
parents:
diff changeset
329 ::boost::optional< std::size_t > aNewItem(m_aHoveredItem);
kono
parents:
diff changeset
330 if (aOldItem != aNewItem) return 1;
kono
parents:
diff changeset
331 return 0;
kono
parents:
diff changeset
332 }
kono
parents:
diff changeset
333