BDE 4.39.x Production Release
Loading...
Searching...
No Matches
baltzo_localtimeperiod.h
Go to the documentation of this file.
1/// @file baltzo_localtimeperiod.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// baltzo_localtimeperiod.h -*-C++-*-
8#ifndef INCLUDED_BALTZO_LOCALTIMEPERIOD
9#define INCLUDED_BALTZO_LOCALTIMEPERIOD
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup baltzo_localtimeperiod baltzo_localtimeperiod
15/// @brief Provide a type describing local time over a time period.
16/// @addtogroup bal
17/// @{
18/// @addtogroup baltzo
19/// @{
20/// @addtogroup baltzo_localtimeperiod
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#baltzo_localtimeperiod-purpose"> Purpose</a>
25/// * <a href="#baltzo_localtimeperiod-classes"> Classes </a>
26/// * <a href="#baltzo_localtimeperiod-description"> Description </a>
27/// * <a href="#baltzo_localtimeperiod-attributes"> Attributes </a>
28/// * <a href="#baltzo_localtimeperiod-usage"> Usage </a>
29/// * <a href="#baltzo_localtimeperiod-example-1-converting-a-utc-time-to-a-local-time"> Example 1: Converting a UTC Time to a Local Time </a>
30///
31/// # Purpose {#baltzo_localtimeperiod-purpose}
32/// Provide a type describing local time over a time period.
33///
34/// # Classes {#baltzo_localtimeperiod-classes}
35///
36/// - baltzo::LocalTimePeriod: time descriptor and period of applicability
37///
38/// @see baltzo_localtimedescriptor, baltzo_zoneinfoutil
39///
40/// # Description {#baltzo_localtimeperiod-description}
41/// This component provides a single, complex-constrained
42/// (value-semantic) attribute class, `baltzo::LocalTimePeriod`, that describes
43/// a period of time over which a local time description (UTC offset, DST
44/// status, and a descriptive string) is in effect.
45///
46/// ## Attributes {#baltzo_localtimeperiod-attributes}
47///
48///
49/// @code
50/// Name Type Default Simple Constraints
51/// ------------- -------------------------- ------- ------------------
52/// descriptor baltzo::LocalTimeDescriptor default none
53/// utcStartTime bdlt::Datetime default none
54/// utcEndTime bdlt::Datetime default none
55///
56/// Complex Constraints
57/// -----------------------------------------------------------------
58/// 'utcStartTime == utcEndTime ||
59/// (utcStartTime != bdlt::Datetime() && utcEndTime != bdlt::Datetime()
60/// && utcStartTime < utcEndTime)'
61/// @endcode
62///
63/// * `localTimeDescriptor`: a description of local time that applies during
64/// the interval defined by `startUtcTime` and `endUtcTime`.
65/// * `utcStartTime`: UTC representation of the start of the time interval over
66/// which `localTimeDescriptor` applies.
67/// * `utcEndTime`: UTC representation of the moment immediately after the end
68/// of the time interval over which `localTimeDescriptor` applies.
69///
70/// For example, in New York in 2010, the local time was Eastern Daylight Time
71/// ("EDT") from March 14, 2010 to November 7, 2010, and during Eastern Daylight
72/// Time, Daylight-Saving Time (DST) was in effect, and the offset from UTC was
73/// -4 hours. We can represent this information using a
74/// `baltzo::LocalTimePeriod` object whose `utcStartTime` is "Mar 14, 2010 07:00
75/// UTC" (2AM EST), `utcEndTime` is "Nov 7, 2010 06:00 UTC" (1AM EST, what would
76/// have been 2AM EDT), and `localTimeDescriptor` has a `description` of "EDT",
77/// `dstInEffectFlag` of `true`, and a `utcOffsetInSeconds` of -14,400
78/// (-4 * 60 * 60).
79///
80/// ## Usage {#baltzo_localtimeperiod-usage}
81///
82///
83/// This section illustrates intended use of this component.
84///
85/// ### Example 1: Converting a UTC Time to a Local Time {#baltzo_localtimeperiod-example-1-converting-a-utc-time-to-a-local-time}
86///
87///
88/// In this example we illustrate how to use a local time period to convert a
89/// UTC time to the corresponding local time in some time zone.
90///
91/// First, we define a function that performs a conversion from UTC time to
92/// local time:
93/// @code
94/// /// Load into the specified `result` the date-time value corresponding
95/// /// to the specified `utcTime` in the local time described by the
96/// /// specified `period`. Return 0 on success, and a non-zero value if
97/// /// `utcTime < period.utcStartTime()` or
98/// /// `utcTime >= period.utcEndTime()`.
99/// int convertUtcToLocalTime(bdlt::Datetime *result,
100/// const bdlt::Datetime& utcTime,
101/// const baltzo::LocalTimePeriod& period)
102/// {
103/// BSLS_ASSERT(result);
104///
105/// if (utcTime < period.utcStartTime() ||
106/// utcTime >= period.utcEndTime()) {
107/// return 1; // RETURN
108/// }
109///
110/// *result = utcTime;
111/// result->addSeconds(period.descriptor().utcOffsetInSeconds());
112/// return 0;
113/// }
114/// @endcode
115/// Then, we create a `baltzo::LocalTimePeriod` object, `edt2010`, that
116/// describes New York Daylight-Saving Time in 2010:
117/// @code
118/// enum { NEW_YORK_DST_OFFSET = -4 * 60 * 60 }; // -4 hours in seconds
119///
120/// baltzo::LocalTimeDescriptor edt(NEW_YORK_DST_OFFSET, true, "EDT");
121///
122/// baltzo::LocalTimePeriod edt2010(edt,
123/// bdlt::Datetime(2010, 3, 14, 7),
124/// bdlt::Datetime(2010, 11, 7, 6));
125///
126/// assert(bdlt::Datetime(2010, 3, 14, 7) == edt2010.utcStartTime());
127/// assert(bdlt::Datetime(2010, 11, 7, 6) == edt2010.utcEndTime());
128/// assert("EDT" == edt2010.descriptor().description());
129/// assert(true == edt2010.descriptor().dstInEffectFlag());
130/// assert(NEW_YORK_DST_OFFSET == edt2010.descriptor().utcOffsetInSeconds());
131/// @endcode
132/// Next, we create a `bdlt::Datetime`, `utcDatetime`, representing the (UTC)
133/// time "Jul 20, 2010 11:00":
134/// @code
135/// bdlt::Datetime utcDatetime(2010, 7, 20, 11, 0, 0);
136/// @endcode
137/// Now, we use the `convertUtcToLocalTime` function we defined earlier to
138/// convert `utcDatetime` into its local time in Eastern Daylight Time (as
139/// described by `edt2010`):
140/// @code
141/// bdlt::Datetime localDatetime;
142/// int status = convertUtcToLocalTime(&localDatetime,
143/// utcDatetime,
144/// edt2010);
145/// if (0 != status) {
146/// // The conversion failed so return an error code.
147///
148/// return 1; // RETURN
149/// }
150/// @endcode
151/// Finally, we verify that the result corresponds to the expected local time in
152/// New York, "Jul 20, 2010 7:00":
153/// @code
154/// assert(bdlt::Datetime(2010, 7, 20, 7) == localDatetime);
155/// @endcode
156/// @}
157/** @} */
158/** @} */
159
160/** @addtogroup bal
161 * @{
162 */
163/** @addtogroup baltzo
164 * @{
165 */
166/** @addtogroup baltzo_localtimeperiod
167 * @{
168 */
169
170#include <balscm_version.h>
171
172#include <baltzo_localdatetime.h>
174
175#include <bdlt_datetime.h>
176
177#include <bslalg_swaputil.h>
178
179#include <bslma_allocator.h>
180#include <bslma_bslallocator.h>
182
184#include <bslmf_movableref.h>
186
187#include <bsls_assert.h>
188#include <bsls_keyword.h>
189#include <bsls_review.h>
190
191#include <bsl_iosfwd.h>
192
193
194namespace baltzo {
195
196 // =====================
197 // class LocalTimePeriod
198 // =====================
199
200/// This complex-constrained (value-semantic) attribute class describes a range
201/// of time in which a particular local time description (offset, DST status,
202/// and a descriptive string) is in effect. See the @ref baltzo_localtimeperiod-attributes section for information on the class attributes.
203///
204/// \note Note that the class invariants
205/// are identically the constraints on the attributes.
206///
207/// See @ref baltzo_localtimeperiod
209
210 // DATA
211 LocalTimeDescriptor d_descriptor; // local time descriptor for this
212 // period
213
214 bdlt::Datetime d_utcStartTime; // start of this period
215
216 bdlt::Datetime d_utcEndTime; // end of this period
217
218 public:
219 // TYPES
221
222 // TRAITS
225
226 // CLASS METHODS
227
228 /// Return `true` if the specified `utcStartTime` and `utcEndTime` have
229 /// the same value, or if `utcStartTime` and `utcEndTime` are comparable
230 /// (i.e., neither has the value of a default-constructed
231 /// `bdlt::DateTime` object) and `utcStartTime < utcEndTime`; return
232 /// `false` otherwise.
235
236 // CREATORS
237
238 /// Create a `LocalTimePeriod` object having the (default) attribute
239 /// values:
240 /// @code
241 /// descriptor() == LocalTimeDescriptor()
242 /// utcStartTime() == bdlt::Datetime()
243 /// utcEndTime() == bdlt::Datetime()
244 /// @endcode
245 /// Optionally specify an `allocator` (e.g., the address of a
246 /// `bslma::Allocator` object) to supply memory; otherwise, the default
247 /// allocator is used.
250
251 /// Create a `LocalTimePeriod` object having the specified `descriptor`,
252 /// `utcStartTime`, and `utcEndTime` attribute values. Optionally specify
253 /// an `allocator` (e.g., the address of a `bslma::Allocator` object) to
254 /// supply memory; otherwise, the default allocator is used.
255 ///
256 /// \pre The behavior is undefined unless `utcStartTime == utcEndTime`, or if `utcStartTime`
257 /// and `utcEndTime` are comparable (i.e., neither equals the a default
258 /// constructed `bdlt::DateTime` object) unless `utcStartTime <
259 /// utcEndTime`. (See the `isValidUtcStartAndEndTime` method.)
264
265 /// Create a `LocalTimePeriod` object with the same value as the specified
266 /// `original` object. Optionally specify an `allocator` (e.g., the
267 /// address of a `bslma::Allocator` object) to supply memory; otherwise,
268 /// the default allocator is used.
269 LocalTimePeriod(const LocalTimePeriod& original,
271
272 /// Create a `LocalTimePeriod` object having the same value and the same
273 /// allocator as the specified `original` object. The value of `original`
274 /// becomes unspecified but valid, and its allocator remains unchanged.
277
278 /// Create a `LocalTimePeriod` object having the same value as the
279 /// specified `original` object, using the specified `allocator` (e.g., the
280 /// address of a `bslma::Allocator` object) to supply memory. The
281 /// allocator of `original` remains unchanged. If `original` and the newly
282 /// created object have the same allocator then the value of `original`
283 /// becomes unspecified but valid, and no exceptions will be thrown;
284 /// otherwise `original` is unchanged and an exception may be thrown.
287
288 /// Destroy this object.
290
291 // MANIPULATORS
292
293 /// Assign to this object the value of the specified `rhs` object, and
294 /// return a reference providing modifiable access to this object.
296
297 /// Assign to this object the value of the specified `rhs` object, and
298 /// return a non-`const` reference to this object. The allocators of this
299 /// object and `rhs` both remain unchanged. If `rhs` and this object have
300 /// the same allocator then the value of `rhs` becomes unspecified but
301 /// valid, and no exceptions will be thrown; otherwise `rhs` is unchanged
302 /// (and an exception may be thrown).
304
305 /// Set the `descriptor` attribute to the specified `value`.
306 void setDescriptor(const LocalTimeDescriptor& value);
307
308 /// Use the specified `utcStartTime` and `utcEndTime` to set the
309 /// `utcStartTime` and `utcEndTime` attributes of this object respectively.
310 ///
311 /// \pre The behavior is undefined unless `utcStartTime == utcEndTime`, or if
312 /// `utcStartTime` and `utcEndTime` are comparable (i.e., neither equals a
313 /// default constructed `bdlt::DateTime` object) unless `utcStartTime <
314 /// utcEndTime`. (See the `isValidUtcStartAndEndTime` method.)
317
318 /// Efficiently exchange the value of this object with the value of the
319 /// specified `other` object. This method provides the no-throw exception-safety guarantee.
320 ///
321 /// \pre The behavior is undefined unless this
322 /// object was created with the same allocator as `other`.
323 void swap(LocalTimePeriod& other);
324
325 // ACCESSORS
326
327 /// Return `get_allocator().mechanism()`.
328 ///
329 /// @deprecated Use @ref get_allocator() instead.
331
332 /// Return a reference providing non-modifiable access to the
333 /// `descriptor` attribute of this object.
334 const LocalTimeDescriptor& descriptor() const;
335
336 /// Return the allocator used by this object to supply memory.
337 ///
338 /// \note Note that if no allocator was supplied at construction the default allocator in
339 /// effect at construction is used.
341
342 /// Return a reference providing non-modifiable access to the `utcEndTime`
343 /// attribute of this object.
344 const bdlt::Datetime& utcEndTime() const;
345
346 /// Return a reference providing non-modifiable access to the
347 /// `utcStartTime` attribute of this object.
348 const bdlt::Datetime& utcStartTime() const;
349
350 // Aspects
351
352 /// Write the value of this object to the specified output `stream` in a
353 /// human-readable format, and return a reference to `stream`. Optionally
354 /// specify an initial indentation `level`, whose absolute value is
355 /// incremented recursively for nested objects. If `level` is specified,
356 /// optionally specify `spacesPerLevel`, whose absolute value indicates the
357 /// number of spaces per indentation level for this and all of its nested
358 /// objects. If `level` is negative, suppress indentation of the first
359 /// line. If `spacesPerLevel` is negative, format the entire output on one
360 /// line, suppressing all but the initial indentation (as governed by
361 /// `level`). If `stream` is not valid on entry, this operation has no effect.
362 ///
363 /// \note Note that the format is not fully specified, and can change
364 /// without notice.
365 bsl::ostream& print(bsl::ostream& stream,
366 int level = 0,
367 int spacesPerLevel = 4) const;
368};
369
370// FREE OPERATORS
371
372/// Return `true` if the specified `lhs` and `rhs` objects have the same value,
373/// and `false` otherwise. Two `LocalTimePeriod` objects have the same value
374/// if each of their corresponding `descriptor`, `utcStartTime`, and
375/// `utcEndTime` attributes have the same value.
376bool operator==(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs);
377
378/// Return `true` if the specified `lhs` and `rhs` objects do not have the same
379/// value, and `false` otherwise. Two `LocalTimePeriod` objects do not have
380/// the same value if the corresponding values of their `descriptor`,
381/// `utcStartTime`, or `utcEndTime` attributes are not the same.
382bool operator!=(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs);
383
384/// Write the value of the specified `object` to the specified output `stream`
385/// in a single-line format, and return a reference to `stream`. If `stream` is not valid on entry, this operation has no effect.
386///
387/// \note Note that this
388/// human-readable format is not fully specified and can change without notice.
389/// Also note that this method has the same behavior as `object.print(stream,
390/// 0, -1)`.
391std::ostream& operator<<(bsl::ostream& stream,
392 const LocalTimePeriod& object);
393
394// FREE FUNCTIONS
395
396/// Exchange the values of the specified `a` and `b` objects. This function
397/// provides the no-throw exception-safety guarantee if the two objects were
398/// created with the same allocator and the basic guarantee otherwise.
400
401// ============================================================================
402// INLINE DEFINITIONS
403// ============================================================================
404
405 // ---------------------
406 // class LocalTimePeriod
407 // ---------------------
408
409// CLASS METHODS
410inline
412 const bdlt::Datetime& utcStartTime,
413 const bdlt::Datetime& utcEndTime)
414{
415 bdlt::Datetime defaultObj;
416 return utcStartTime == utcEndTime
417 || (utcStartTime != defaultObj && utcEndTime != defaultObj
419}
420
421// CREATORS
422inline
424: d_descriptor()
425, d_utcStartTime()
426, d_utcEndTime()
427{
428}
429
430inline
432: d_descriptor(allocator)
433, d_utcStartTime()
434, d_utcEndTime()
435{
436}
437
438inline
440 const bdlt::Datetime& utcStartTime,
441 const bdlt::Datetime& utcEndTime,
442 const allocator_type& allocator)
443: d_descriptor(descriptor, allocator)
444, d_utcStartTime(utcStartTime)
445, d_utcEndTime(utcEndTime)
446{
447 BSLS_ASSERT(isValidUtcStartAndEndTime(d_utcStartTime, d_utcEndTime));
448}
449
450inline
452 const allocator_type& allocator)
453: d_descriptor(original.d_descriptor, allocator)
454, d_utcStartTime(original.d_utcStartTime)
455, d_utcEndTime(original.d_utcEndTime)
456{
457}
458
459inline
462: d_descriptor(bslmf::MovableRefUtil::move(
463 bslmf::MovableRefUtil::access(original).d_descriptor))
464, d_utcStartTime(bslmf::MovableRefUtil::access(original).d_utcStartTime)
465, d_utcEndTime(bslmf::MovableRefUtil::access(original).d_utcEndTime)
466{
467}
468
469inline
471 const allocator_type& allocator)
472: d_descriptor(bslmf::MovableRefUtil::move(
473 bslmf::MovableRefUtil::access(original).d_descriptor),
474 allocator)
475, d_utcStartTime(bslmf::MovableRefUtil::access(original).d_utcStartTime)
476, d_utcEndTime(bslmf::MovableRefUtil::access(original).d_utcEndTime)
477{
478}
479
480inline
482{
483 BSLS_ASSERT(isValidUtcStartAndEndTime(d_utcStartTime, d_utcEndTime));
484}
485
486// MANIPULATORS
487inline
489{
490 d_descriptor = rhs.d_descriptor; // must be first
491 d_utcStartTime = rhs.d_utcStartTime;
492 d_utcEndTime = rhs.d_utcEndTime;
493 return *this;
494}
495
496inline
499{
500 LocalTimePeriod& lvalue = rhs;
501
502 // Move 'd_descriptor' first for strong exception guarantee.
503
504 d_descriptor = bslmf::MovableRefUtil::move(lvalue.d_descriptor);
505 d_utcStartTime = bslmf::MovableRefUtil::move(lvalue.d_utcStartTime);
506 d_utcEndTime = bslmf::MovableRefUtil::move(lvalue.d_utcEndTime);
507
508 return *this;
509}
510
511inline
513{
514 d_descriptor = value;
515}
516
517inline
519 const bdlt::Datetime& utcEndTime)
520{
522
523 d_utcStartTime = utcStartTime;
524 d_utcEndTime = utcEndTime;
525}
526
527inline
529{
530 // 'swap' is undefined for objects with non-equal allocators.
531
533
534 bslalg::SwapUtil::swap(&d_descriptor, &other.d_descriptor);
535 bslalg::SwapUtil::swap(&d_utcStartTime, &other.d_utcStartTime);
536 bslalg::SwapUtil::swap(&d_utcEndTime, &other.d_utcEndTime);
537}
538
539// ACCESSORS
540inline
545
546inline
548{
549 return d_descriptor;
550}
551
552inline
557
558inline
560{
561 return d_utcEndTime;
562}
563
564inline
566{
567 return d_utcStartTime;
568}
569
570} // close package namespace
571
572// FREE OPERATORS
573inline
574bool baltzo::operator==(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs)
575{
576 return lhs.descriptor() == rhs.descriptor()
577 && lhs.utcStartTime() == rhs.utcStartTime()
578 && lhs.utcEndTime() == rhs.utcEndTime();
579}
580
581inline
582bool baltzo::operator!=(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs)
583{
584 return lhs.descriptor() != rhs.descriptor()
585 || lhs.utcStartTime() != rhs.utcStartTime()
586 || lhs.utcEndTime() != rhs.utcEndTime();
587}
588
589inline
590std::ostream& baltzo::operator<<(bsl::ostream& stream,
591 const LocalTimePeriod& object)
592{
593 return object.print(stream, 0, -1);
594}
595
596
597
598#endif
599
600// ----------------------------------------------------------------------------
601// Copyright 2018 Bloomberg Finance L.P.
602//
603// Licensed under the Apache License, Version 2.0 (the "License");
604// you may not use this file except in compliance with the License.
605// You may obtain a copy of the License at
606//
607// http://www.apache.org/licenses/LICENSE-2.0
608//
609// Unless required by applicable law or agreed to in writing, software
610// distributed under the License is distributed on an "AS IS" BASIS,
611// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
612// See the License for the specific language governing permissions and
613// limitations under the License.
614// ----------------------------- END-OF-FILE ----------------------------------
615
616/** @} */
617/** @} */
618/** @} */
Definition baltzo_localtimedescriptor.h:186
const bsl::string & description() const
Definition baltzo_localtimedescriptor.h:550
Definition baltzo_localtimeperiod.h:208
~LocalTimePeriod()
Destroy this object.
Definition baltzo_localtimeperiod.h:481
LocalTimePeriod & operator=(const LocalTimePeriod &rhs)
Definition baltzo_localtimeperiod.h:488
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
void setDescriptor(const LocalTimeDescriptor &value)
Set the descriptor attribute to the specified value.
Definition baltzo_localtimeperiod.h:512
LocalTimePeriod()
Definition baltzo_localtimeperiod.h:423
BSLMF_NESTED_TRAIT_DECLARATION(LocalTimePeriod, bslmf::IsBitwiseMoveable)
const bdlt::Datetime & utcStartTime() const
Definition baltzo_localtimeperiod.h:565
void setUtcStartAndEndTime(const bdlt::Datetime &utcStartTime, const bdlt::Datetime &utcEndTime)
Definition baltzo_localtimeperiod.h:518
bslma::Allocator * allocator() const
Definition baltzo_localtimeperiod.h:541
const bdlt::Datetime & utcEndTime() const
Definition baltzo_localtimeperiod.h:559
bsl::allocator< char > allocator_type
Definition baltzo_localtimeperiod.h:220
static bool isValidUtcStartAndEndTime(const bdlt::Datetime &utcStartTime, const bdlt::Datetime &utcEndTime)
Definition baltzo_localtimeperiod.h:411
const LocalTimeDescriptor & descriptor() const
Definition baltzo_localtimeperiod.h:547
void swap(LocalTimePeriod &other)
Definition baltzo_localtimeperiod.h:528
allocator_type get_allocator() const
Definition baltzo_localtimeperiod.h:553
BSLMF_NESTED_TRAIT_DECLARATION(LocalTimePeriod, bslma::UsesBslmaAllocator)
Definition bdlt_datetime.h:330
Definition bslma_bslallocator.h:588
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1146
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this string to supply memory.
Definition bslstl_string.h:7423
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition baltzo_datafileloader.h:259
bool operator==(const LocalDatetime &lhs, const LocalDatetime &rhs)
bool operator!=(const LocalDatetime &lhs, const LocalDatetime &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, DstPolicy::Enum value)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bdlbb_blob.h:579
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_isbitwisemoveable.h:718
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1039