BDE 4.14.0 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#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
194#include <bsl_algorithm.h>
195#endif // BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
196
197
198namespace baltzo {
199
200 // =====================
201 // class LocalTimePeriod
202 // =====================
203
204/// This complex-constrained (value-semantic) attribute class describes a range
205/// of time in which a particular local time description (offset, DST status,
206/// and a descriptive string) is in effect. See the @ref baltzo_localtimeperiod-attributes section
207/// for information on the class attributes. Note that the class invariants
208/// are identically the constraints on the attributes.
209///
210/// See @ref baltzo_localtimeperiod
212
213 // DATA
214 LocalTimeDescriptor d_descriptor; // local time descriptor for this
215 // period
216
217 bdlt::Datetime d_utcStartTime; // start of this period
218
219 bdlt::Datetime d_utcEndTime; // end of this period
220
221 public:
222 // TYPES
224
225 // TRAITS
228
229 // CLASS METHODS
230
231 /// Return `true` if the specified `utcStartTime` and `utcEndTime` have
232 /// the same value, or if `utcStartTime` and `utcEndTime` are comparable
233 /// (i.e., neither has the value of a default-constructed
234 /// `bdlt::DateTime` object) and `utcStartTime < utcEndTime`; return
235 /// `false` otherwise.
238
239 // CREATORS
240
242 /// Create a `LocalTimePeriod` object having the (default) attribute
243 /// values:
244 /// @code
245 /// descriptor() == LocalTimeDescriptor()
246 /// utcStartTime() == bdlt::Datetime()
247 /// utcEndTime() == bdlt::Datetime()
248 /// @endcode
249 /// Optionally specify an `allocator` (e.g., the address of a
250 /// `bslma::Allocator` object) to supply memory; otherwise, the default
251 /// allocator is used.
253
254 /// Create a `LocalTimePeriod` object having the specified `descriptor`,
255 /// `utcStartTime`, and `utcEndTime` attribute values. Optionally specify
256 /// an `allocator` (e.g., the address of a `bslma::Allocator` object) to
257 /// supply memory; otherwise, the default allocator is used. The behavior
258 /// is undefined unless `utcStartTime == utcEndTime`, or if `utcStartTime`
259 /// and `utcEndTime` are comparable (i.e., neither equals the a default
260 /// constructed `bdlt::DateTime` object) unless `utcStartTime <
261 /// utcEndTime`. (See the `isValidUtcStartAndEndTime` method.)
266
267 /// Create a `LocalTimePeriod` object with the same value as the specified
268 /// `original` object. Optionally specify an `allocator` (e.g., the
269 /// address of a `bslma::Allocator` object) to supply memory; otherwise,
270 /// the default allocator is used.
271 LocalTimePeriod(const LocalTimePeriod& original,
273
274 /// Create a `LocalTimePeriod` object having the same value and the same
275 /// allocator as the specified `original` object. The value of `original`
276 /// becomes unspecified but valid, and its allocator remains unchanged.
279
280 /// Create a `LocalTimePeriod` object having the same value as the
281 /// specified `original` object, using the specified `allocator` (e.g., the
282 /// address of a `bslma::Allocator` object) to supply memory. The
283 /// allocator of `original` remains unchanged. If `original` and the newly
284 /// created object have the same allocator then the value of `original`
285 /// becomes unspecified but valid, and no exceptions will be thrown;
286 /// otherwise `original` is unchanged and an exception may be thrown.
289
290 /// Destroy this object.
292
293 // MANIPULATORS
294
295 /// Assign to this object the value of the specified `rhs` object, and
296 /// return a reference providing modifiable access to this object.
298
299 /// Assign to this object the value of the specified `rhs` object, and
300 /// return a non-`const` reference to this object. The allocators of this
301 /// object and `rhs` both remain unchanged. If `rhs` and this object have
302 /// the same allocator then the value of `rhs` becomes unspecified but
303 /// valid, and no exceptions will be thrown; otherwise `rhs` is unchanged
304 /// (and an exception may be thrown).
306
307 /// Set the `descriptor` attribute to the specified `value`.
308 void setDescriptor(const LocalTimeDescriptor& value);
309
310 /// Use the specified `utcStartTime` and `utcEndTime` to set the
311 /// `utcStartTime` and `utcEndTime` attributes of this object respectively.
312 /// The behavior is undefined unless `utcStartTime == utcEndTime`, or if
313 /// `utcStartTime` and `utcEndTime` are comparable (i.e., neither equals a
314 /// default constructed `bdlt::DateTime` object) unless `utcStartTime <
315 /// utcEndTime`. (See the `isValidUtcStartAndEndTime` method.)
318
319 /// Efficiently exchange the value of this object with the value of the
320 /// specified `other` object. This method provides the no-throw
321 /// exception-safety guarantee. 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 `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. Note that
337 /// if no allocator was supplied at construction the default allocator in
338 /// effect at construction is used.
340
341 /// Return a reference providing non-modifiable access to the `utcEndTime`
342 /// attribute of this object.
343 const bdlt::Datetime& utcEndTime() const;
344
345 /// Return a reference providing non-modifiable access to the
346 /// `utcStartTime` attribute of this object.
347 const bdlt::Datetime& utcStartTime() const;
348
349 // Aspects
350
351 /// Write the value of this object to the specified output `stream` in a
352 /// human-readable format, and return a reference to `stream`. Optionally
353 /// specify an initial indentation `level`, whose absolute value is
354 /// incremented recursively for nested objects. If `level` is specified,
355 /// optionally specify `spacesPerLevel`, whose absolute value indicates the
356 /// number of spaces per indentation level for this and all of its nested
357 /// objects. If `level` is negative, suppress indentation of the first
358 /// line. If `spacesPerLevel` is negative, format the entire output on one
359 /// line, suppressing all but the initial indentation (as governed by
360 /// `level`). If `stream` is not valid on entry, this operation has no
361 /// effect. Note that the format is not fully specified, and can change
362 /// without notice.
363 bsl::ostream& print(bsl::ostream& stream,
364 int level = 0,
365 int spacesPerLevel = 4) const;
366};
367
368// FREE OPERATORS
369
370/// Return `true` if the specified `lhs` and `rhs` objects have the same value,
371/// and `false` otherwise. Two `LocalTimePeriod` objects have the same value
372/// if each of their corresponding `descriptor`, `utcStartTime`, and
373/// `utcEndTime` attributes have the same value.
374bool operator==(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs);
375
376/// Return `true` if the specified `lhs` and `rhs` objects do not have the same
377/// value, and `false` otherwise. Two `LocalTimePeriod` objects do not have
378/// the same value if the corresponding values of their `descriptor`,
379/// `utcStartTime`, or `utcEndTime` attributes are not the same.
380bool operator!=(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs);
381
382/// Write the value of the specified `object` to the specified output `stream`
383/// in a single-line format, and return a reference to `stream`. If `stream`
384/// is not valid on entry, this operation has no effect. Note that this
385/// human-readable format is not fully specified and can change without notice.
386/// Also note that this method has the same behavior as `object.print(stream,
387/// 0, -1)`.
388std::ostream& operator<<(bsl::ostream& stream,
389 const LocalTimePeriod& object);
390
391// FREE FUNCTIONS
392
393/// Exchange the values of the specified `a` and `b` objects. This function
394/// provides the no-throw exception-safety guarantee if the two objects were
395/// created with the same allocator and the basic guarantee otherwise.
397
398// ============================================================================
399// INLINE DEFINITIONS
400// ============================================================================
401
402 // ---------------------
403 // class LocalTimePeriod
404 // ---------------------
405
406// CLASS METHODS
407inline
409 const bdlt::Datetime& utcStartTime,
410 const bdlt::Datetime& utcEndTime)
411{
412 bdlt::Datetime defaultObj;
413 return utcStartTime == utcEndTime
414 || (utcStartTime != defaultObj && utcEndTime != defaultObj
416}
417
418// CREATORS
419inline
421: d_descriptor()
422, d_utcStartTime()
423, d_utcEndTime()
424{
425}
426
427inline
429: d_descriptor(allocator)
430, d_utcStartTime()
431, d_utcEndTime()
432{
433}
434
435inline
437 const bdlt::Datetime& utcStartTime,
438 const bdlt::Datetime& utcEndTime,
439 const allocator_type& allocator)
440: d_descriptor(descriptor, allocator)
441, d_utcStartTime(utcStartTime)
442, d_utcEndTime(utcEndTime)
443{
444 BSLS_ASSERT(isValidUtcStartAndEndTime(d_utcStartTime, d_utcEndTime));
445}
446
447inline
449 const allocator_type& allocator)
450: d_descriptor(original.d_descriptor, allocator)
451, d_utcStartTime(original.d_utcStartTime)
452, d_utcEndTime(original.d_utcEndTime)
453{
454}
455
456inline
459: d_descriptor(bslmf::MovableRefUtil::move(
460 bslmf::MovableRefUtil::access(original).d_descriptor))
461, d_utcStartTime(bslmf::MovableRefUtil::access(original).d_utcStartTime)
462, d_utcEndTime(bslmf::MovableRefUtil::access(original).d_utcEndTime)
463{
464}
465
466inline
468 const allocator_type& allocator)
469: d_descriptor(bslmf::MovableRefUtil::move(
470 bslmf::MovableRefUtil::access(original).d_descriptor),
471 allocator)
472, d_utcStartTime(bslmf::MovableRefUtil::access(original).d_utcStartTime)
473, d_utcEndTime(bslmf::MovableRefUtil::access(original).d_utcEndTime)
474{
475}
476
477inline
479{
480 BSLS_ASSERT(isValidUtcStartAndEndTime(d_utcStartTime, d_utcEndTime));
481}
482
483// MANIPULATORS
484inline
486{
487 d_descriptor = rhs.d_descriptor; // must be first
488 d_utcStartTime = rhs.d_utcStartTime;
489 d_utcEndTime = rhs.d_utcEndTime;
490 return *this;
491}
492
493inline
496{
497 LocalTimePeriod& lvalue = rhs;
498
499 // Move 'd_descriptor' first for strong exception guarantee.
500
501 d_descriptor = bslmf::MovableRefUtil::move(lvalue.d_descriptor);
502 d_utcStartTime = bslmf::MovableRefUtil::move(lvalue.d_utcStartTime);
503 d_utcEndTime = bslmf::MovableRefUtil::move(lvalue.d_utcEndTime);
504
505 return *this;
506}
507
508inline
510{
511 d_descriptor = value;
512}
513
514inline
516 const bdlt::Datetime& utcEndTime)
517{
519
520 d_utcStartTime = utcStartTime;
521 d_utcEndTime = utcEndTime;
522}
523
524inline
526{
527 // 'swap' is undefined for objects with non-equal allocators.
528
530
531 bslalg::SwapUtil::swap(&d_descriptor, &other.d_descriptor);
532 bslalg::SwapUtil::swap(&d_utcStartTime, &other.d_utcStartTime);
533 bslalg::SwapUtil::swap(&d_utcEndTime, &other.d_utcEndTime);
534}
535
536// ACCESSORS
537inline
542
543inline
545{
546 return d_descriptor;
547}
548
549inline
554
555inline
557{
558 return d_utcEndTime;
559}
560
561inline
563{
564 return d_utcStartTime;
565}
566
567} // close package namespace
568
569// FREE OPERATORS
570inline
571bool baltzo::operator==(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs)
572{
573 return lhs.descriptor() == rhs.descriptor()
574 && lhs.utcStartTime() == rhs.utcStartTime()
575 && lhs.utcEndTime() == rhs.utcEndTime();
576}
577
578inline
579bool baltzo::operator!=(const LocalTimePeriod& lhs, const LocalTimePeriod& rhs)
580{
581 return lhs.descriptor() != rhs.descriptor()
582 || lhs.utcStartTime() != rhs.utcStartTime()
583 || lhs.utcEndTime() != rhs.utcEndTime();
584}
585
586inline
587std::ostream& baltzo::operator<<(bsl::ostream& stream,
588 const LocalTimePeriod& object)
589{
590 return object.print(stream, 0, -1);
591}
592
593
594
595#endif
596
597// ----------------------------------------------------------------------------
598// Copyright 2018 Bloomberg Finance L.P.
599//
600// Licensed under the Apache License, Version 2.0 (the "License");
601// you may not use this file except in compliance with the License.
602// You may obtain a copy of the License at
603//
604// http://www.apache.org/licenses/LICENSE-2.0
605//
606// Unless required by applicable law or agreed to in writing, software
607// distributed under the License is distributed on an "AS IS" BASIS,
608// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
609// See the License for the specific language governing permissions and
610// limitations under the License.
611// ----------------------------- END-OF-FILE ----------------------------------
612
613/** @} */
614/** @} */
615/** @} */
Definition baltzo_localtimedescriptor.h:189
const bsl::string & description() const
Definition baltzo_localtimedescriptor.h:542
Definition baltzo_localtimeperiod.h:211
~LocalTimePeriod()
Destroy this object.
Definition baltzo_localtimeperiod.h:478
LocalTimePeriod & operator=(const LocalTimePeriod &rhs)
Definition baltzo_localtimeperiod.h:485
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:509
LocalTimePeriod()
Definition baltzo_localtimeperiod.h:420
BSLMF_NESTED_TRAIT_DECLARATION(LocalTimePeriod, bslmf::IsBitwiseMoveable)
const bdlt::Datetime & utcStartTime() const
Definition baltzo_localtimeperiod.h:562
void setUtcStartAndEndTime(const bdlt::Datetime &utcStartTime, const bdlt::Datetime &utcEndTime)
Definition baltzo_localtimeperiod.h:515
bslma::Allocator * allocator() const
Definition baltzo_localtimeperiod.h:538
const bdlt::Datetime & utcEndTime() const
Definition baltzo_localtimeperiod.h:556
bsl::allocator< char > allocator_type
Definition baltzo_localtimeperiod.h:223
static bool isValidUtcStartAndEndTime(const bdlt::Datetime &utcStartTime, const bdlt::Datetime &utcEndTime)
Definition baltzo_localtimeperiod.h:408
const LocalTimeDescriptor & descriptor() const
Definition baltzo_localtimeperiod.h:544
void swap(LocalTimePeriod &other)
Definition baltzo_localtimeperiod.h:525
allocator_type get_allocator() const
Definition baltzo_localtimeperiod.h:550
BSLMF_NESTED_TRAIT_DECLARATION(LocalTimePeriod, bslma::UsesBslmaAllocator)
Definition bdlt_datetime.h:331
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bslma_bslallocator.h:580
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1126
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this string to supply memory.
Definition bslstl_string.h:6723
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)
bool operator!=(const LocalDatetime &lhs, const LocalDatetime &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, DstPolicy::Enum value)
Definition bdlbb_blob.h:576
Definition bslma_usesbslmaallocator.h:343
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