4949template <typename ResourceType = void *> // type of the resource held onto
5050struct DefaultResourceTypePolicy
5151{
52- inline static void InitializeEmpty (_Out_ ResourceType* resource) throw()
52+ inline static void InitializeEmpty (_Out_ ResourceType* resource) noexcept
5353 {
5454 // Most resources (pointers to memory, HGLOBALS, HGDIOBJ...)
5555 // are indicated as empty by setting to 0/NULL. If a resource
@@ -62,17 +62,17 @@ struct DefaultResourceTypePolicy
6262 *resource = 0 ;
6363 }
6464
65- inline static bool IsNull (ResourceType resource) throw()
65+ inline static bool IsNull (ResourceType resource) noexcept
6666 {
6767 return (resource == 0 );
6868 }
6969
70- inline static void Acquire (ResourceType resource) throw()
70+ inline static void Acquire (ResourceType resource) noexcept
7171 {
7272 // Do nothing.
7373 }
7474
75- inline static void Release (ResourceType resource) throw()
75+ inline static void Release (ResourceType resource) noexcept
7676 {
7777 // Do nothing.
7878 }
@@ -121,7 +121,7 @@ class AutoResource
121121 ResourceTypePolicy::InitializeEmpty (Cast (&resource_));
122122 }
123123
124- inline ~AutoResource () throw ()
124+ inline ~AutoResource () noexcept
125125 {
126126 // Notice we merely free the resource and do not zero the resource,
127127 // since we actually prefer to leave the value intact, not because
@@ -137,14 +137,14 @@ class AutoResource
137137
138138 // Implicitly promote to the resource type for all the times the resource
139139 // handle/pointer is passed by value to a function.
140- inline operator ResourceType () const throw()
140+ inline operator ResourceType () const noexcept
141141 {
142142 return resource_;
143143 }
144144
145145 // Explicit getter for times when the compiler becomes confused
146146 // during overload resolution.
147- inline ResourceType Get () const throw()
147+ inline ResourceType Get () const noexcept
148148 {
149149 return resource_;
150150 }
@@ -156,27 +156,27 @@ class AutoResource
156156 // since needing the address of a resource is not only for the sake of
157157 // out params - it's perfectly legitimate as an in param too, such as with
158158 // WaitForMultipleObjects().
159- inline operator ResourceType&() throw ()
159+ inline operator ResourceType&() noexcept
160160 {
161161 return resource_;
162162 }
163163
164164 // Used when passed as an out parameter to any function,
165165 // or when the caller needs a pointer to a pointer.
166166 // If modified directly, the caller is responsible for managing the object.
167- inline ResourceType* operator &() throw ()
167+ inline ResourceType* operator &() noexcept
168168 {
169169 return &resource_;
170170 }
171171
172172 // Explicitly named form.
173- inline ResourceType* Address () throw()
173+ inline ResourceType* Address () noexcept
174174 {
175175 return &resource_;
176176 }
177177
178178 // Explicitly named form.
179- inline ResourceType& Reference () throw()
179+ inline ResourceType& Reference () noexcept
180180 {
181181 return resource_;
182182 }
@@ -185,7 +185,7 @@ class AutoResource
185185 //
186186 // ComPtr<ICat> cat;
187187 // cat->Meow();
188- inline ResourceType operator ->() const throw ()
188+ inline ResourceType operator ->() const noexcept
189189 {
190190 return resource_;
191191 }
@@ -253,7 +253,7 @@ class AutoResource
253253 }
254254
255255 // Abandon the resource without freeing it.
256- inline void Abandon () throw()
256+ inline void Abandon () noexcept
257257 {
258258 ResourceTypePolicy::InitializeEmpty (Cast (&resource_));
259259 }
@@ -262,7 +262,7 @@ class AutoResource
262262 // this Attach does not increment the ref count, which is symmetric
263263 // to Detach().
264264 // * No self-assignment checking is done here.
265- ResourceType Attach (ResourceType resource) throw()
265+ ResourceType Attach (ResourceType resource) noexcept
266266 {
267267 DEBUG_ASSERT (resource != resource_);
268268 std::swap (resource_, resource);
@@ -272,7 +272,7 @@ class AutoResource
272272
273273 // Lets go of the resource without freeing it, but returning it
274274 // to the caller.
275- ResourceType Detach () throw()
275+ ResourceType Detach () noexcept
276276 {
277277 ResourceType resource = resource_;
278278 ResourceTypePolicy::InitializeEmpty (Cast (&resource_));
@@ -284,18 +284,18 @@ class AutoResource
284284 //
285285 // p1.Attach(p2.Detach()) -> p1.Steal(p2)
286286 //
287- inline void Steal (Self& other) throw()
287+ inline void Steal (Self& other) noexcept
288288 {
289289 swap (other);
290290 other.Clear ();
291291 }
292292
293- inline bool IsNull () const throw()
293+ inline bool IsNull () const noexcept
294294 {
295295 return ResourceTypePolicy::IsNull (resource_);
296296 }
297297
298- inline bool IsSet () const throw()
298+ inline bool IsSet () const noexcept
299299 {
300300 return !ResourceTypePolicy::IsNull (resource_);
301301 }
@@ -308,7 +308,7 @@ class AutoResource
308308 Clear ();
309309 }
310310
311- inline void swap (ResourceType& resource) throw()
311+ inline void swap (ResourceType& resource) noexcept
312312 {
313313 std::swap (resource_, resource);
314314 }
@@ -353,7 +353,7 @@ namespace std
353353 void swap (
354354 AutoResource<ResourceType, ResourceTypePolicy, BaseResourceType>& lhs,
355355 AutoResource<ResourceType, ResourceTypePolicy, BaseResourceType>& rhs
356- ) throw()
356+ ) noexcept
357357 {
358358 lhs.swap (rhs);
359359 }
@@ -387,7 +387,7 @@ using UnownedMemoryPointer = AutoResource<ResourceType*, UnownedMemoryPointerPol
387387template <typename ResourceType>
388388struct OwnedMemoryPointerPolicy : public DefaultResourceTypePolicy <ResourceType>
389389{
390- inline static void Release (ResourceType resource) throw()
390+ inline static void Release (ResourceType resource) noexcept
391391 {
392392 if (resource != nullptr )
393393 {
0 commit comments