BDE 4.14.0 Production release
Loading...
Searching...
No Matches
baltzo_localtimedescriptor.h
Go to the documentation of this file.
1/// @file baltzo_localtimedescriptor.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// baltzo_localtimedescriptor.h -*-C++-*-
8#ifndef INCLUDED_BALTZO_LOCALTIMEDESCRIPTOR
9#define INCLUDED_BALTZO_LOCALTIMEDESCRIPTOR
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup baltzo_localtimedescriptor baltzo_localtimedescriptor
15/// @brief Provide an attribute class for characterizing local time values.
16/// @addtogroup bal
17/// @{
18/// @addtogroup baltzo
19/// @{
20/// @addtogroup baltzo_localtimedescriptor
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#baltzo_localtimedescriptor-purpose"> Purpose</a>
25/// * <a href="#baltzo_localtimedescriptor-classes"> Classes </a>
26/// * <a href="#baltzo_localtimedescriptor-description"> Description </a>
27/// * <a href="#baltzo_localtimedescriptor-attributes"> Attributes </a>
28/// * <a href="#baltzo_localtimedescriptor-usage"> Usage </a>
29/// * <a href="#baltzo_localtimedescriptor-example-1-converting-between-utc-and-local-times"> Example 1: Converting Between UTC and Local Times </a>
30///
31/// # Purpose {#baltzo_localtimedescriptor-purpose}
32/// Provide an attribute class for characterizing local time values.
33///
34/// # Classes {#baltzo_localtimedescriptor-classes}
35///
36/// - baltzo::LocalTimeDescriptor: attributes characterizing a local time
37///
38/// @see baltzo_zoneinfo
39///
40/// # Description {#baltzo_localtimedescriptor-description}
41/// This component provides a single, simply constrained
42/// (value-semantic) attribute class, `baltzo::LocalTimeDescriptor`, that is
43/// used to characterize subsets of local time values within time zones. Note
44/// that this class is consistent with the "local-time types" found in the
45/// "Zoneinfo" representation of a time zone (see @ref baltzo_zoneinfo ).
46///
47/// ## Attributes {#baltzo_localtimedescriptor-attributes}
48///
49///
50/// @code
51/// Name Type Default Simple Constraints
52/// ------------------ ----------- ------- ------------------
53/// description bsl::string "" none
54/// dstInEffectFlag bool false none
55/// utcOffsetInSeconds int 0 [-86399 .. 86399]
56/// @endcode
57/// * `description`: non-canonical, non-localized name (intended for
58/// debugging).
59/// * `dstInEffectFlag`: `true` if the described local times are
60/// Daylight-Saving-Time (DST) values.
61/// * `utcOffsetInSeconds`: offset from UTC of the described local times.
62///
63/// For example, in New York on January 1, 2011, the local time is Eastern
64/// Standard Time, Daylight-Saving Time (DST) is not in effect, and the offset
65/// from UTC is -5 hours. We can represent this information using a
66/// `baltzo::LocalTimeDescriptor` object whose `description` is "EST",
67/// `dstInEffectFlag` is `false`, and `utcOffsetInSeconds` is
68/// `-18,000 (-5*60*60)`. Note that `description` is *not* canonical, and is
69/// intended for development and debugging only.
70///
71/// ## Usage {#baltzo_localtimedescriptor-usage}
72///
73///
74/// This section illustrates intended use of this component.
75///
76/// ### Example 1: Converting Between UTC and Local Times {#baltzo_localtimedescriptor-example-1-converting-between-utc-and-local-times}
77///
78///
79/// When using the "Zoneinfo" database, we want to represent and access the
80/// local time information contained in the "Zoneinfo" binary data files. Once
81/// we have obtained this information, we can use it to convert times from one
82/// time zone to another. The following code illustrates how to perform such
83/// conversions using `baltzo::LocalTimeDescriptor`.
84///
85/// First, we define a `baltzo::LocalTimeDescriptor` object that characterizes
86/// the local time in effect for New York Daylight-Saving Time in 2010:
87/// @code
88/// enum { NEW_YORK_DST_OFFSET = -4 * 60 * 60 }; // -4 hours in seconds
89///
90/// baltzo::LocalTimeDescriptor newYorkDst(NEW_YORK_DST_OFFSET, true, "EDT");
91///
92/// assert(NEW_YORK_DST_OFFSET == newYorkDst.utcOffsetInSeconds());
93/// assert( true == newYorkDst.dstInEffectFlag());
94/// assert( "EDT" == newYorkDst.description());
95/// @endcode
96/// Then, we create a `bdlt::Datetime` representing the time
97/// "Jul 20, 2010 11:00" in New York:
98/// @code
99/// bdlt::Datetime newYorkDatetime(2010, 7, 20, 11, 0, 0);
100/// @endcode
101/// Next, we convert `newYorkDatetime` to its corresponding UTC value using the
102/// `newYorkDst` descriptor (created above); note that, when converting from a
103/// local time to a UTC time, the *signed* offset from UTC is *subtracted* from
104/// the local time:
105/// @code
106/// bdlt::Datetime utcDatetime = newYorkDatetime;
107/// utcDatetime.addSeconds(-newYorkDst.utcOffsetInSeconds());
108/// @endcode
109/// Then, we verify that the result corresponds to the expected UTC time,
110/// "Jul 20, 2010 15:00":
111/// @code
112/// assert(bdlt::Datetime(2010, 7, 20, 15, 0, 0) == utcDatetime);
113/// @endcode
114/// Next, we define a `baltzo::LocalTimeDescriptor` object that describes the
115/// local time in effect for Rome in the summer of 2010:
116/// @code
117/// enum { ROME_DST_OFFSET = 2 * 60 * 60 }; // 2 hours in seconds
118///
119/// baltzo::LocalTimeDescriptor romeDst(ROME_DST_OFFSET, true, "CEST");
120///
121/// assert(ROME_DST_OFFSET == romeDst.utcOffsetInSeconds());
122/// assert( true == romeDst.dstInEffectFlag());
123/// assert( "CEST" == romeDst.description());
124/// @endcode
125/// Now, we convert `utcDatetime` to its corresponding local-time value in Rome
126/// using the `romeDst` descriptor (created above):
127/// @code
128/// bdlt::Datetime romeDatetime = utcDatetime;
129/// romeDatetime.addSeconds(romeDst.utcOffsetInSeconds());
130/// @endcode
131/// Notice that, when converting from UTC time to local time, the signed offset
132/// from UTC is *added* to UTC time rather than subtracted.
133///
134/// Finally, we verify that the result corresponds to the expected local time,
135/// "Jul 20, 2010 17:00":
136/// @code
137/// assert(bdlt::Datetime(2010, 7, 20, 17, 0, 0) == romeDatetime);
138/// @endcode
139/// @}
140/** @} */
141/** @} */
142
143/** @addtogroup bal
144 * @{
145 */
146/** @addtogroup baltzo
147 * @{
148 */
149/** @addtogroup baltzo_localtimedescriptor
150 * @{
151 */
152
153#include <balscm_version.h>
154
155#include <bslalg_swaputil.h>
156
157#include <bslma_aatypeutil.h>
158#include <bslma_allocatorutil.h>
159#include <bslma_bslallocator.h>
160
163
164#include <bsls_assert.h>
165#include <bsls_keyword.h>
166#include <bsls_review.h>
167
168#include <bsl_algorithm.h>
169#include <bsl_iosfwd.h>
170#include <bsl_string.h>
171
172#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
173#include <bslalg_typetraits.h>
174#endif // BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
175
176
177namespace baltzo {
178
179 // =========================
180 // class LocalTimeDescriptor
181 // =========================
182
183/// This simply constrained (value-semantic) attribute class characterizes a
184/// subset of local time values. See the @ref baltzo_localtimedescriptor-attributes section for
185/// information on the class attributes. Note that the class invariants are
186/// identically the constraints on the individual attributes.
187///
188/// See @ref baltzo_localtimedescriptor
190
191 // DATA
192 int d_utcOffsetInSeconds; // *signed* offset *from* UTC
193
194 bool d_dstInEffectFlag; // `true` if Daylight-Saving Time is in
195 // effect, and `false` otherwise
196
197 bsl::string d_description; // *non-canonical* identifier for this
198 // descriptor
199
200 // FRIENDS
202
203 public:
204 // TYPES
206
207 // TRAITS
210
211 // CLASS METHODS
212
213 /// Return `true` if the specified `value` is in the range
214 /// `[-86399 .. 86399]`, and `false` otherwise.
215 static bool isValidUtcOffsetInSeconds(int value);
216
217 // CREATORS
218
220 /// Create a `LocalTimeDescriptor` object having the (default)
221 /// attribute values:
222 /// @code
223 /// utcOffsetInSeconds() == 0
224 /// dstInEffectFlag() == false
225 /// description() == ""
226 /// @endcode
227 /// Optionally specify an `allocator` (e.g., the address of a
228 /// `bslma::Allocator` object) to supply memory; otherwise, the default
229 /// allocator is used.
231
232 /// Create a `LocalTimeDescriptor` object having the specified
233 /// `utcOffsetInSeconds`, `dstInEffectFlag`, and `description`
234 /// attribute values. Optionally specify an `allocator` (e.g., the
235 /// address of a `bslma::Allocator` object) to supply memory; otherwise,
236 /// the default allocator is used. The behavior is undefined unless
237 /// `-86339 <= utcOffsetInSeconds <= 86399`.
239 bool dstInEffectFlag,
242
243 /// Create a `LocalTimeDescriptor` object having the same value as the
244 /// specified `original` object. Optionally specify an `allocator`
245 /// (e.g., the address of a `bslma::Allocator` object) to supply memory;
246 /// otherwise, the default allocator is used.
249
250 /// Create a `LocalTimeDescriptor` object having the same value and the
251 /// same allocator as the specified `original` object. The value of
252 /// `original` becomes unspecified but valid, and its allocator remains
253 /// unchanged.
256
257 /// Create a `LocalTimeDescriptor` object having the same value as the
258 /// specified `original` object, using the specified `allocator` (e.g.,
259 /// the address of a `bslma::Allocator` object) to supply memory. The
260 /// allocator of `original` remains unchanged. If `original` and the
261 /// newly created object have the same allocator then the value of
262 /// `original` becomes unspecified but valid, and no exceptions will be
263 /// thrown; otherwise `original` is unchanged and an exception may be
264 /// thrown.
267
268 /// Destroy this object.
270
271 // MANIPULATORS
272
273 /// Assign to this object the value of the specified `rhs` object, and
274 /// return a non-`const` reference to this object.
276
277 /// Assign to this object the value of the specified `rhs` object, and
278 /// return a non-`const` reference to this object. The allocators of
279 /// this object and `rhs` both remain unchanged. If `rhs` and this
280 /// object have the same allocator then the value of `rhs` becomes
281 /// unspecified but valid, and no exceptions will be thrown; otherwise
282 /// `rhs` is unchanged (and an exception may be thrown).
284
285 /// Set the `description` attribute of this object to the specified
286 /// `value`. Note that `value` is not canonical, and is intended for
287 /// debugging only.
288 void setDescription(const bsl::string_view& value);
289
290 /// Set the `dstInEffectFlag` attribute of this object to the specified
291 /// `value`. Note that `true` implies Daylight-Saving Time (DST) is in
292 /// effect.
293 void setDstInEffectFlag(bool value);
294
295 /// Set the `utcOffsetInSeconds` attribute of this object to the
296 /// specified `value`. The behavior is undefined unless
297 /// `-86399 <= value <= 86399`.
298 void setUtcOffsetInSeconds(int value);
299
300 // Aspects
301
302 /// Efficiently exchange the value of this object with the value of the
303 /// specified `other` object. This method provides the no-throw
304 /// exception-safety guarantee. The behavior is undefined unless this
305 /// object was created with the same allocator as `other`.
306 void swap(LocalTimeDescriptor& other);
307
308 // ACCESSORS
309
310 /// Return a `const` reference to the `description` attribute of this
311 /// object. Note that `description` is not canonical, and is intended
312 /// for debugging only.
313 const bsl::string& description() const;
314
315 /// Return the value of the `dstInEffectFlag` attribute of this object.
316 /// Note that `true` implies Daylight-Saving Time (DST) is in effect.
317 bool dstInEffectFlag() const;
318
319 /// Return the value of the `utcOffsetInSeconds` attribute of this
320 /// object. Note that this value is in the range `[-86399 .. 86399]`.
321 int utcOffsetInSeconds() const;
322
323 // Aspects
324
325 /// @deprecated Use @ref get_allocator() instead.
326 ///
327 /// Return `get_allocator().mechanism()`.
329
330 /// Return the allocator used by this object to supply memory. Note
331 /// that if no allocator was supplied at construction the default
332 /// allocator in effect at construction is used.
334
335 /// Write the value of this object to the specified output `stream` in a
336 /// human-readable format, and return a non-`const` reference to
337 /// `stream`. Optionally specify an initial indentation `level`, whose
338 /// absolute value is incremented recursively for nested objects. If
339 /// `level` is specified, optionally specify `spacesPerLevel`, whose
340 /// absolute value indicates the number of spaces per indentation level
341 /// for this and all of its nested objects. If `level` is negative,
342 /// suppress indentation of the first line. If `spacesPerLevel` is
343 /// negative, format the entire output on one line, suppressing all but
344 /// the initial indentation (as governed by `level`). If `stream` is
345 /// not valid on entry, this operation has no effect. Note that the
346 /// format is not fully specified, and can change without notice.
347 bsl::ostream& print(bsl::ostream& stream,
348 int level = 0,
349 int spacesPerLevel = 4) const;
350};
351
352// FREE OPERATORS
353
354/// Return `true` if the specified `lhs` and `rhs` objects have the same
355/// value, and `false` otherwise. Two `LocalTimeDescriptor` objects have
356/// the same value if all of the corresponding values of their
357/// `utcOffsetInSeconds`, `dstInEffectFlag`, and `description` attributes
358/// are the same.
359bool operator==(const LocalTimeDescriptor& lhs,
360 const LocalTimeDescriptor& rhs);
361
362/// Return `true` if the specified `lhs` and `rhs` objects do not have the
363/// same value, and `false` otherwise. Two `LocalTimeDescriptor` objects do
364/// not have the same value if any of the corresponding values of their
365/// `utcOffsetInSeconds`, `dstInEffectFlag`, or `description` attributes are
366/// not the same.
367bool operator!=(const LocalTimeDescriptor& lhs,
368 const LocalTimeDescriptor& rhs);
369
370/// Write the value of the specified `object` to the specified output
371/// `stream` in a single-line format, and return a non-`const` reference to
372/// `stream`. If `stream` is not valid on entry, this operation has no
373/// effect. Note that this human-readable format is not fully specified and
374/// can change without notice. Also note that this method has the same
375/// behavior as `object.print(stream, 0, -1)`, but with the attribute names
376/// elided.
377bsl::ostream& operator<<(bsl::ostream& stream,
378 const LocalTimeDescriptor& object);
379
380// FREE FUNCTIONS
381
382/// Exchange the values of the specified `a` and `b` objects. This function
383/// provides the no-throw exception-safety guarantee if the two objects were
384/// created with the same allocator and the basic guarantee otherwise.
386
387// ============================================================================
388// INLINE DEFINITIONS
389// ============================================================================
390
391 // -------------------------
392 // class LocalTimeDescriptor
393 // -------------------------
394
395// CLASS METHODS
396inline
398{
399 return value >= -86399 && value <= 86399;
400}
401
402// CREATORS
403inline
405: d_utcOffsetInSeconds(0)
406, d_dstInEffectFlag(false)
407, d_description()
408{
409}
410
411inline
413: d_utcOffsetInSeconds(0)
414, d_dstInEffectFlag(false)
415, d_description(bslma::AllocatorUtil::adapt(allocator))
416{
417}
418
419inline
421 int utcOffsetInSeconds,
422 bool dstInEffectFlag,
423 const bsl::string_view& description,
424 const allocator_type& allocator)
425: d_utcOffsetInSeconds(utcOffsetInSeconds)
426, d_dstInEffectFlag(dstInEffectFlag)
427, d_description(description.begin(),
428 description.end(),
429 bslma::AllocatorUtil::adapt(allocator))
430{
432}
433
434inline
436 const allocator_type& allocator)
437: d_utcOffsetInSeconds(original.d_utcOffsetInSeconds)
438, d_dstInEffectFlag(original.d_dstInEffectFlag)
439, d_description(original.d_description, bslma::AllocatorUtil::adapt(allocator))
440{
441}
442
443inline
446: d_utcOffsetInSeconds(bslmf::MovableRefUtil::move(
447 bslmf::MovableRefUtil::access(original).d_utcOffsetInSeconds)),
448 d_dstInEffectFlag(bslmf::MovableRefUtil::move(
449 bslmf::MovableRefUtil::access(original).d_dstInEffectFlag)),
450 d_description(bslmf::MovableRefUtil::move(
451 bslmf::MovableRefUtil::access(original).d_description))
452{
453}
454
455inline
458 const allocator_type& allocator)
459: d_utcOffsetInSeconds(bslmf::MovableRefUtil::move(
460 bslmf::MovableRefUtil::access(original).d_utcOffsetInSeconds))
461, d_dstInEffectFlag(bslmf::MovableRefUtil::move(
462 bslmf::MovableRefUtil::access(original).d_dstInEffectFlag))
463, d_description(
464 bslmf::MovableRefUtil::move(
465 bslmf::MovableRefUtil::access(original).d_description),
466 bslma::AllocatorUtil::adapt(allocator))
467{
468}
469
470
471inline
476
477// MANIPULATORS
478inline
480 const LocalTimeDescriptor& rhs)
481{
482 d_description = rhs.d_description; // first for strong
483 // exception guarantee
484 d_utcOffsetInSeconds = rhs.d_utcOffsetInSeconds;
485 d_dstInEffectFlag = rhs.d_dstInEffectFlag;
486 return *this;
487}
488
489inline
492{
493 // Move 'd_description' first for strong exception guarantee.
494
495 d_description = bslmf::MovableRefUtil::move(
496 bslmf::MovableRefUtil::access(rhs).d_description);
497
498 d_utcOffsetInSeconds = bslmf::MovableRefUtil::move(
499 bslmf::MovableRefUtil::access(rhs).d_utcOffsetInSeconds);
500
501 d_dstInEffectFlag = bslmf::MovableRefUtil::move(
502 bslmf::MovableRefUtil::access(rhs).d_dstInEffectFlag);
503
504 return *this;
505}
506
507
508inline
510{
511 d_description.assign(value.begin(), value.end());
512}
513
514inline
516{
517 d_dstInEffectFlag = value;
518}
519
520inline
522{
524
525 d_utcOffsetInSeconds = value;
526}
527
528 // Aspects
529
530inline
532{
534
535 bslalg::SwapUtil::swap(&d_description, &other.d_description);
536 bslalg::SwapUtil::swap(&d_dstInEffectFlag, &other.d_dstInEffectFlag);
537 bslalg::SwapUtil::swap(&d_utcOffsetInSeconds, &other.d_utcOffsetInSeconds);
538}
539
540// ACCESSORS
541inline
543{
544 return d_description;
545}
546
547inline
549{
550 return d_dstInEffectFlag;
551}
552
553inline
555{
556 return d_utcOffsetInSeconds;
557}
558
559 // Aspects
560
561inline
566
567inline
569{
570 return bslma::AATypeUtil::getAllocatorFromSubobject<allocator_type>(
571 d_description);
572}
573
574} // close package namespace
575
576// FREE OPERATORS
577inline
578bool baltzo::operator==(const LocalTimeDescriptor& lhs,
579 const LocalTimeDescriptor& rhs)
580{
581 return lhs.utcOffsetInSeconds() == rhs.utcOffsetInSeconds()
582 && lhs.dstInEffectFlag() == rhs.dstInEffectFlag()
583 && lhs.description() == rhs.description();
584}
585
586inline
587bool baltzo::operator!=(const LocalTimeDescriptor& lhs,
588 const LocalTimeDescriptor& rhs)
589{
590 return lhs.utcOffsetInSeconds() != rhs.utcOffsetInSeconds()
591 || lhs.dstInEffectFlag() != rhs.dstInEffectFlag()
592 || lhs.description() != rhs.description();
593}
594
595// FREE FUNCTIONS
596inline
597void baltzo::swap(LocalTimeDescriptor& a, LocalTimeDescriptor& b)
598{
599 bslalg::SwapUtil::swap(&a.d_description, &b.d_description);
600 bslalg::SwapUtil::swap(&a.d_dstInEffectFlag, &b.d_dstInEffectFlag);
601 bslalg::SwapUtil::swap(&a.d_utcOffsetInSeconds, &b.d_utcOffsetInSeconds);
602}
603
604
605
606#endif
607
608// ----------------------------------------------------------------------------
609// Copyright 2020 Bloomberg Finance L.P.
610//
611// Licensed under the Apache License, Version 2.0 (the "License");
612// you may not use this file except in compliance with the License.
613// You may obtain a copy of the License at
614//
615// http://www.apache.org/licenses/LICENSE-2.0
616//
617// Unless required by applicable law or agreed to in writing, software
618// distributed under the License is distributed on an "AS IS" BASIS,
619// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
620// See the License for the specific language governing permissions and
621// limitations under the License.
622// ----------------------------- END-OF-FILE ----------------------------------
623
624/** @} */
625/** @} */
626/** @} */
Definition baltzo_localtimedescriptor.h:189
const bsl::string & description() const
Definition baltzo_localtimedescriptor.h:542
bsl::allocator allocator_type
Definition baltzo_localtimedescriptor.h:205
static bool isValidUtcOffsetInSeconds(int value)
Definition baltzo_localtimedescriptor.h:397
friend void swap(LocalTimeDescriptor &, LocalTimeDescriptor &)
BSLMF_NESTED_TRAIT_DECLARATION(LocalTimeDescriptor, bslmf::IsBitwiseMoveable)
LocalTimeDescriptor & operator=(const LocalTimeDescriptor &rhs)
Definition baltzo_localtimedescriptor.h:479
void setDescription(const bsl::string_view &value)
Definition baltzo_localtimedescriptor.h:509
void setDstInEffectFlag(bool value)
Definition baltzo_localtimedescriptor.h:515
void setUtcOffsetInSeconds(int value)
Definition baltzo_localtimedescriptor.h:521
bslma::Allocator * allocator() const
Definition baltzo_localtimedescriptor.h:562
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
~LocalTimeDescriptor()
Destroy this object.
Definition baltzo_localtimedescriptor.h:472
LocalTimeDescriptor()
Definition baltzo_localtimedescriptor.h:404
bool dstInEffectFlag() const
Definition baltzo_localtimedescriptor.h:548
allocator_type get_allocator() const
Definition baltzo_localtimedescriptor.h:568
int utcOffsetInSeconds() const
Definition baltzo_localtimedescriptor.h:554
Definition bslma_bslallocator.h:580
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1126
Definition bslstl_stringview.h:441
BSLS_KEYWORD_CONSTEXPR const_iterator end() const BSLS_KEYWORD_NOEXCEPT
Return the past-the-end iterator for this view.
Definition bslstl_stringview.h:1620
BSLS_KEYWORD_CONSTEXPR const_iterator begin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_stringview.h:1602
Definition bslstl_string.h:1281
basic_string & assign(const basic_string &replacement)
Definition bslstl_string.h:5716
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:194
Definition bslma_allocator.h:457
Definition bslmf_movableref.h:751
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1804
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:632
Definition baltzo_datafileloader.h:263
bool operator==(const LocalDatetime &lhs, const LocalDatetime &rhs)
void swap(LocalDatetime &a, LocalDatetime &b)
bool operator!=(const LocalDatetime &lhs, const LocalDatetime &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, DstPolicy::Enum value)
Definition balxml_encoderoptions.h:68
Definition bdlbb_blob.h:576
Definition bslmf_isbitwisemoveable.h:718
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1060
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1032