BDE 4.14.0 Production release
Loading...
Searching...
No Matches
baltzo_localdatetime.h
Go to the documentation of this file.
1/// @file baltzo_localdatetime.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// baltzo_localdatetime.h -*-C++-*-
8#ifndef INCLUDED_BALTZO_LOCALDATETIME
9#define INCLUDED_BALTZO_LOCALDATETIME
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $ $CSID: $")
13
14/// @defgroup baltzo_localdatetime baltzo_localdatetime
15/// @brief Provide an attribute class for time-zone-aware datetime values.
16/// @addtogroup bal
17/// @{
18/// @addtogroup baltzo
19/// @{
20/// @addtogroup baltzo_localdatetime
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#baltzo_localdatetime-purpose"> Purpose</a>
25/// * <a href="#baltzo_localdatetime-classes"> Classes </a>
26/// * <a href="#baltzo_localdatetime-description"> Description </a>
27/// * <a href="#baltzo_localdatetime-attributes"> Attributes </a>
28/// * <a href="#baltzo_localdatetime-usage"> Usage </a>
29/// * <a href="#baltzo_localdatetime-example-1-creation-and-use-of-a-baltzo-localdatetime-object"> Example 1: Creation and Use of a baltzo::LocalDatetime Object </a>
30///
31/// # Purpose {#baltzo_localdatetime-purpose}
32/// Provide an attribute class for time-zone-aware datetime values.
33///
34/// # Classes {#baltzo_localdatetime-classes}
35///
36/// - baltzo::LocalDatetime: time-zone-aware datetime type
37///
38/// @see bdlt_datetimetz
39///
40/// # Description {#baltzo_localdatetime-description}
41/// This component provides a single, unconstrained
42/// (value-semantic) attribute class, `baltzo::LocalDatetime`, that is used to
43/// encapsulate a date, time, offset from UTC (Coordinated Universal Time), and
44/// a time zone (string) identifier. The date, time, and offset from UTC are
45/// contained within a `bdlt::DatetimeTz` object, which together represents a
46/// wall-clock time in a given time zone. This component differs from
47/// @ref bdlt_datetimetz in that it provides, as part of the value, a string
48/// identifier for the corresponding time zone.
49///
50/// ## Attributes {#baltzo_localdatetime-attributes}
51///
52///
53/// @code
54/// Name Type Default
55/// ---------- --------------- ----------------------------------
56/// datetimeTz bdlt::DatetimeTz January 1, 0001, 24:00:00.000+0000
57/// timeZoneId bsl::string ""
58/// @endcode
59/// * `datetimeTz`: date, time, and offset from UTC of the local time.
60/// * `timeZoneId`: unique identifier representing the local time zone.
61///
62/// For example, in New York on January 1, 2011, at 10 a.m. the local offset
63/// from UTC is -5 hours, and a standard time zone identifier for New York is
64/// "America/New_York". We can represent this information using a
65/// `baltzo::LocalDatetime` object whose `datetimeTz` attribute is
66/// "01JAN2011_10:00:00.000-0005" and whose `timeZoneId` attribute is
67/// "America/New_York".
68///
69/// Note that it is up to the user to ensure that the `datetimeTz` and
70/// `timeZoneId` attributes are consistent as the `baltzo::LocalDatetime` object
71/// itself does not maintain any invariants with respect to their values.
72///
73/// ## Usage {#baltzo_localdatetime-usage}
74///
75///
76/// This section illustrates intended use of this component.
77///
78/// ### Example 1: Creation and Use of a baltzo::LocalDatetime Object {#baltzo_localdatetime-example-1-creation-and-use-of-a-baltzo-localdatetime-object}
79///
80///
81/// First, we default-construct a `baltzo::LocalDatetime` object:
82/// @code
83/// baltzo::LocalDatetime localDatetime;
84/// @endcode
85/// Next, we update the time referred to by `localDatetime` to the New York
86/// time "December 25, 2009, 11:00" with the time-zone identifier set to
87/// "America/New_York":
88/// @code
89/// bdlt::Datetime datetime(2009, 12, 25, 11, 00, 00);
90/// bdlt::DatetimeTz datetimeTz(datetime, -5 * 60); // offset is specified
91/// // in minutes from UTC
92/// bsl::string timeZoneId("America/New_York");
93/// localDatetime.setDatetimeTz(datetimeTz);
94/// localDatetime.setTimeZoneId(timeZoneId);
95///
96/// assert(datetimeTz == localDatetime.datetimeTz());
97/// assert(timeZoneId == localDatetime.timeZoneId());
98/// @endcode
99/// Now, we change the time-zone identifier to another string, for example
100/// "Europe/Berlin":
101/// @code
102/// bsl::string anotherTimeZoneId("Europe/Berlin");
103/// localDatetime.setTimeZoneId(anotherTimeZoneId);
104///
105/// assert(datetimeTz == localDatetime.datetimeTz());
106/// assert(anotherTimeZoneId == localDatetime.timeZoneId());
107/// @endcode
108/// Finally, we stream `localDatetime` to `bsl::cout`:
109/// @code
110/// bsl::cout << localDatetime << bsl::endl;
111/// @endcode
112/// This statement produces the following output on `stdout`:
113/// @code
114/// [ 25DEC2009_11:00:00.000-0500 "Europe/Berlin" ]
115/// @endcode
116/// @}
117/** @} */
118/** @} */
119
120/** @addtogroup bal
121 * @{
122 */
123/** @addtogroup baltzo
124 * @{
125 */
126/** @addtogroup baltzo_localdatetime
127 * @{
128 */
129
130#include <balscm_version.h>
131
132#include <bdlt_datetimetz.h>
133
134#include <bslalg_swaputil.h>
135
136#include <bslma_allocator.h>
137#include <bslma_bslallocator.h>
139
141#include <bslmf_movableref.h>
143
144#include <bsls_assert.h>
145#include <bsls_keyword.h>
146#include <bsls_review.h>
147
150
151#include <bsl_iosfwd.h>
152#include <bsl_string.h>
153
154#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
155#include <bslalg_typetraits.h>
156
157#include <bsl_algorithm.h>
158#endif // BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
159
160
161namespace baltzo {
162
163 // ===================
164 // class LocalDatetime
165 // ===================
166
167/// This unconstrained (value-semantic) attribute class characterizes a date
168/// time, offset from UTC, and a time zone identifier represented by a string.
169/// See the @ref baltzo_localdatetime-attributes section for information on the class attributes.
170///
171/// See @ref baltzo_localdatetime
173
174 // DATA
175 bdlt::DatetimeTz d_datetimeTz; // local date-time and offset from UTC
176 bsl::string d_timeZoneId; // local time-zone identifier
177
178 // FRIENDS
180
181 public:
182 // TYPES
184
185 // TRAITS
188
189 // CLASS METHODS
190
191 // Aspects
192
193#ifndef BDE_OMIT_INTERNAL_DEPRECATED
194 /// Return the most current BDEX streaming version number supported by
195 /// this class.
196 ///
197 /// @DEPRECATED Use `maxSupportedBdexVersion(int)` instead.
198 static int maxSupportedBdexVersion();
199
200#endif // BDE_OMIT_INTERNAL_DEPRECATED -- pending deprecation
201
202 /// Return the maximum valid BDEX format version, as indicated by the
203 /// specified `versionSelector`, to be passed to the `bdexStreamOut`
204 /// method. Note that it is highly recommended that `versionSelector` be
205 /// formatted as "YYYYMMDD", a date representation. Also note that
206 /// `versionSelector` should be a *compile*-time-chosen value that selects
207 /// a format version supported by both externalizer and unexternalizer.
208 /// See the `bslx` package-level documentation for more information on BDEX
209 /// streaming of value-semantic types and containers.
210 static int maxSupportedBdexVersion(int versionSelector);
211
212 // CREATORS
213
215 /// Create a `LocalDatetime` object having the (default) attribute values:
216 /// @code
217 /// datetimeTz() == bdlt::DatetimeTz()
218 /// timeZoneId() == ""
219 /// @endcode
220 /// Optionally specify an `allocator` (e.g., the address of a
221 /// `bslma::Allocator` object) to supply memory; otherwise, the default
222 /// allocator is used.
223 explicit LocalDatetime(const allocator_type& allocator);
224
228 /// Create a `LocalDatetime` object with attribute values set from the
229 /// specified `datetimeTz` and `timeZoneId`. Optionally specify an
230 /// `allocator` (e.g., the address of a `bslma::Allocator` object) to
231 /// supply memory; otherwise, the default allocator is used. If
232 /// `timeZoneId` is passed as a null pointer, it is treated as an empty
233 /// string.
235 const char *timeZoneId,
237
238 /// Create a `LocalDatetime` object having the same value as the specified
239 /// `original` object. Optionally specify an `allocator` (e.g., the
240 /// address of a `bslma::Allocator` object) to supply memory; otherwise,
241 /// the default allocator is used.
242 LocalDatetime(const LocalDatetime& original,
244
245 /// Create a `LocalDatetime` object having the same value and the same
246 /// allocator as the specified `original` object. The value of `original`
247 /// becomes unspecified but valid, and its allocator remains unchanged.
250
251 /// Create a `LocalDatetime` object having the same value as the specified
252 /// `original` object, using the specified `allocator` (e.g., the address
253 /// of a `bslma::Allocator` object) to supply memory. The allocator of
254 /// `original` remains unchanged. If `original` and the newly created
255 /// object have the same allocator then the value of `original` becomes
256 /// unspecified but valid, and no exceptions will be thrown; otherwise
257 /// `original` is unchanged and an exception may be thrown.
260
261 /// Destroy this object.
263
264 // MANIPULATORS
265
266 /// Assign to this object the value of the specified `rhs` object, and
267 /// return a reference providing modifiable access to this object.
269
270 /// Assign to this object the value of the specified `rhs` object, and
271 /// return a non-`const` reference to this object. The allocators of this
272 /// object and `rhs` both remain unchanged. If `rhs` and this object have
273 /// the same allocator then the value of `rhs` becomes unspecified but
274 /// valid, and no exceptions will be thrown; otherwise `rhs` is unchanged
275 /// (and an exception may be thrown).
277
278 /// Set the `datetimeTz` attribute of this object to the specified `value`.
279 void setDatetimeTz(const bdlt::DatetimeTz& value);
280
281 void setTimeZoneId(const bsl::string_view& value);
282 /// Set the `timeZoneId` attribute of this object to the specified `value`.
283 /// If `value` is null, it is treated as an empty string.
284 void setTimeZoneId(const char *value);
285
286 // Aspects
287
288 /// Assign to this object the value read from the specified input `stream`
289 /// using the specified `version` format, and return a reference to
290 /// `stream`. If `stream` is initially invalid, this operation has no
291 /// effect. If `version` is not supported, this object is unaltered and
292 /// `stream` is invalidated, but otherwise unmodified. If `version` is
293 /// supported but `stream` becomes invalid during this operation, this
294 /// object has an undefined, but valid, state. Note that no version is
295 /// read from `stream`. See the `bslx` package-level documentation for
296 /// more information on BDEX streaming of value-semantic types and
297 /// containers.
298 template <class STREAM>
299 STREAM& bdexStreamIn(STREAM& stream, int version);
300
301 /// Efficiently exchange the value of this object with the value of the
302 /// specified `other` object. This method provides the no-throw
303 /// exception-safety guarantee. The behavior is undefined unless this
304 /// object was created with the same allocator as was `other`.
305 void swap(LocalDatetime& other);
306
307 // ACCESSORS
308
309 /// Return a reference providing non-modifiable access to the
310 /// `datetimeTz` attribute of this object.
311 const bdlt::DatetimeTz& datetimeTz() const;
312
313 /// Return a reference providing non-modifiable access to the `timeZoneId`
314 /// attribute of this object.
315 const bsl::string& timeZoneId() const;
316
317 // Aspects
318
319 // Allocator
320
321 /// Return `get_allocator().mechanism()`.
322 ///
323 /// @DEPRECATED Use `get_allocator()` instead.
325
326 /// Return the allocator used by this object to supply memory. Note that
327 /// if no allocator was supplied at construction the default allocator in
328 /// effect at construction is used.
330
331 // Output
332
333 /// Write the value of this object, using the specified `version` format,
334 /// to the specified output `stream`, and return a reference to `stream`.
335 /// If `stream` is initially invalid, this operation has no effect. If
336 /// `version` is not supported, `stream` is invalidated, but otherwise
337 /// unmodified. Note that `version` is not written to `stream`. See the
338 /// `bslx` package-level documentation for more information on BDEX
339 /// streaming of value-semantic types and containers.
340 template <class STREAM>
341 STREAM& bdexStreamOut(STREAM& stream, int version) const;
342
343 /// Write the value of this object to the specified output `stream` in a
344 /// human-readable format, and return a reference providing modifiable
345 /// access to `stream`. Optionally specify an initial indentation `level`,
346 /// whose absolute value is incremented recursively for nested objects. If
347 /// `level` is specified, optionally specify `spacesPerLevel`, whose
348 /// absolute value indicates the number of spaces per indentation level for
349 /// this and all of its nested objects. If `level` is negative, suppress
350 /// indentation of the first line. If `spacesPerLevel` is negative, format
351 /// the entire output on one line, suppressing all but the initial
352 /// indentation (as governed by `level`). If `stream` is not valid on
353 /// entry, this operation has no effect. Note that the format is not fully
354 /// specified, and can change without notice.
355 bsl::ostream& print(bsl::ostream& stream,
356 int level = 0,
357 int spacesPerLevel = 4) const;
358};
359
360// FREE OPERATORS
361
362/// Return `true` if the specified `lhs` and `rhs` objects have the same value,
363/// and `false` otherwise. Two `LocalDatetime` objects have the same value if
364/// all of the corresponding values of their `datetimeTz` and `timeZoneId`
365/// attributes are the same.
366bool operator==(const LocalDatetime& lhs, const LocalDatetime& rhs);
367
368/// Return `true` if the specified `lhs` and `rhs` objects do not have the same
369/// value, and `false` otherwise. Two `LocalDatetime` objects do not have the
370/// same value if any of the corresponding values of their `datetimeTz` or
371/// `timeZoneId` attributes are not the same.
372bool operator!=(const LocalDatetime& lhs, const LocalDatetime& rhs);
373
374/// Write the value of the specified `object` to the specified output `stream`
375/// in a single-line format, and return a reference providing modifiable access
376/// to `stream`. If `stream` is not valid on entry, this operation has no
377/// effect. Note that this human-readable format is not fully specified and
378/// can change without notice. Also note that this method has the same
379/// behavior as `object.print(stream, 0, -1)` with the attribute names elided.
380bsl::ostream& operator<<(bsl::ostream& stream, const LocalDatetime& object);
381
382// FREE FUNCTIONS
383
384/// Exchange the values of the specified `a` and `b` objects. This function
385/// provides the no-throw exception-safety guarantee if the two objects were
386/// created with the same allocator and the basic guarantee otherwise.
387void swap(LocalDatetime& a, LocalDatetime& b);
388
389// ============================================================================
390// INLINE DEFINITIONS
391// ============================================================================
392
393 // -------------------
394 // class LocalDatetime
395 // -------------------
396
397// CLASS METHODS
398
399 // Aspects
400
401inline
402int LocalDatetime::maxSupportedBdexVersion(int /* versionSelector */)
403{
404 return 1;
405}
406
407// CREATORS
408inline
410: d_datetimeTz()
411, d_timeZoneId()
412{
413}
414
415inline
417: d_datetimeTz()
418, d_timeZoneId(allocator)
419{
420}
421
422inline
424 const bsl::string_view& timeZoneId,
425 const allocator_type& allocator)
426: d_datetimeTz(datetimeTz)
427, d_timeZoneId(timeZoneId.begin(), timeZoneId.end(), allocator)
428{
429}
430
431inline
433 const char *timeZoneId,
434 const allocator_type& allocator)
435: d_datetimeTz(datetimeTz)
436, d_timeZoneId(allocator)
437{
438 if (timeZoneId) {
439 bsl::string(timeZoneId, allocator).swap(d_timeZoneId);
440 }
441}
442
443inline
445 const allocator_type& allocator)
446: d_datetimeTz(original.d_datetimeTz)
447, d_timeZoneId(original.d_timeZoneId, allocator)
448{
449}
450
451inline
460
461inline
463 const allocator_type& allocator)
464: d_datetimeTz(bslmf::MovableRefUtil::move(
465 bslmf::MovableRefUtil::access(original).d_datetimeTz))
466, d_timeZoneId(bslmf::MovableRefUtil::move(
467 bslmf::MovableRefUtil::access(original).d_timeZoneId), allocator)
468{
469}
470
471inline
475
476// MANIPULATORS
477inline
479{
480 d_timeZoneId = rhs.d_timeZoneId; // first to allow strong guarantee
481 d_datetimeTz = rhs.d_datetimeTz;
482 return *this;
483}
484
485inline
487{
488 // Move 'd_timeZoneId' first for strong exception guarantee.
489
490 d_timeZoneId = bslmf::MovableRefUtil::move(
491 bslmf::MovableRefUtil::access(rhs).d_timeZoneId);
492
493 d_datetimeTz = bslmf::MovableRefUtil::move(
494 bslmf::MovableRefUtil::access(rhs).d_datetimeTz);
495
496 return *this;
497}
498
499inline
501{
502 d_datetimeTz = value;
503}
504
505inline
507{
508 // The swap ensures that the if the old value of 'd_timeZoneId' was longer
509 // than the new one, space won't be wasted.
510
511 bsl::string(value, d_timeZoneId.get_allocator().mechanism()).swap(
512 d_timeZoneId);
513}
514
515inline
516void LocalDatetime::setTimeZoneId(const char *value)
517{
518 if (value) {
519 d_timeZoneId.assign(value);
520 }
521 else {
522 d_timeZoneId.clear();
523 }
524}
525
526 // Aspects
527
528template <class STREAM>
529STREAM& LocalDatetime::bdexStreamIn(STREAM& stream, int version)
530{
531 if (stream) {
532 switch (version) {
533 case 1: {
534 bslx::InStreamFunctions::bdexStreamIn(stream, d_timeZoneId, 1);
535 bslx::InStreamFunctions::bdexStreamIn(stream, d_datetimeTz, 1);
536 } break;
537 default: {
538 stream.invalidate(); // unrecognized version number
539 }
540 }
541 }
542 return stream;
543}
544
545inline
547{
549
550 bslalg::SwapUtil::swap(&d_datetimeTz, &other.d_datetimeTz);
551 bslalg::SwapUtil::swap(&d_timeZoneId, &other.d_timeZoneId);
552}
553
554// ACCESSORS
555inline
557{
558 return d_datetimeTz;
559}
560
561inline
563{
564 return d_timeZoneId;
565}
566
567 // Aspects
568
569 // Allocator
570
571inline
576
577inline
582
583 // Output
584
585template <class STREAM>
586STREAM& LocalDatetime::bdexStreamOut(STREAM& stream, int version) const
587{
588 if (stream) {
589 switch (version) {
590 case 1: {
591 bslx::OutStreamFunctions::bdexStreamOut(stream, d_timeZoneId, 1);
592 bslx::OutStreamFunctions::bdexStreamOut(stream, d_datetimeTz, 1);
593 } break;
594 default: {
595 stream.invalidate(); // unrecognized version number
596 }
597 }
598 }
599 return stream;
600}
601
602#ifndef BDE_OMIT_INTERNAL_DEPRECATED // pending deprecation
603
604// DEPRECATED METHODS
605inline
610
611#endif // BDE_OMIT_INTERNAL_DEPRECATED -- pending deprecation
612
613} // close package namespace
614
615// FREE OPERATORS
616inline
617bool baltzo::operator==(const LocalDatetime& lhs, const LocalDatetime& rhs)
618{
619 return lhs.datetimeTz() == rhs.datetimeTz()
620 && lhs.timeZoneId() == rhs.timeZoneId();
621}
622
623inline
624bool baltzo::operator!=(const LocalDatetime& lhs, const LocalDatetime& rhs)
625{
626 return lhs.datetimeTz() != rhs.datetimeTz()
627 || lhs.timeZoneId() != rhs.timeZoneId();
628}
629
630// FREE FUNCTIONS
631inline
632void baltzo::swap(LocalDatetime& a, LocalDatetime& b)
633{
634 bslalg::SwapUtil::swap(&a.d_datetimeTz, &b.d_datetimeTz);
635 bslalg::SwapUtil::swap(&a.d_timeZoneId, &b.d_timeZoneId);
636}
637
638
639
640#endif
641
642// ----------------------------------------------------------------------------
643// Copyright 2018 Bloomberg Finance L.P.
644//
645// Licensed under the Apache License, Version 2.0 (the "License");
646// you may not use this file except in compliance with the License.
647// You may obtain a copy of the License at
648//
649// http://www.apache.org/licenses/LICENSE-2.0
650//
651// Unless required by applicable law or agreed to in writing, software
652// distributed under the License is distributed on an "AS IS" BASIS,
653// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
654// See the License for the specific language governing permissions and
655// limitations under the License.
656// ----------------------------- END-OF-FILE ----------------------------------
657
658/** @} */
659/** @} */
660/** @} */
Definition baltzo_localdatetime.h:172
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
void setDatetimeTz(const bdlt::DatetimeTz &value)
Set the datetimeTz attribute of this object to the specified value.
Definition baltzo_localdatetime.h:500
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition baltzo_localdatetime.h:529
const bsl::string & timeZoneId() const
Definition baltzo_localdatetime.h:562
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition baltzo_localdatetime.h:586
friend void swap(LocalDatetime &, LocalDatetime &)
bsl::allocator< char > allocator_type
Definition baltzo_localdatetime.h:183
LocalDatetime & operator=(const LocalDatetime &rhs)
Definition baltzo_localdatetime.h:478
~LocalDatetime()
Destroy this object.
Definition baltzo_localdatetime.h:472
BSLMF_NESTED_TRAIT_DECLARATION(LocalDatetime, bslmf::IsBitwiseMoveable)
LocalDatetime()
Definition baltzo_localdatetime.h:409
allocator_type get_allocator() const
Definition baltzo_localdatetime.h:578
static int maxSupportedBdexVersion()
Definition baltzo_localdatetime.h:606
void setTimeZoneId(const bsl::string_view &value)
Definition baltzo_localdatetime.h:506
bslma::Allocator * allocator() const
Definition baltzo_localdatetime.h:572
const bdlt::DatetimeTz & datetimeTz() const
Definition baltzo_localdatetime.h:556
BSLMF_NESTED_TRAIT_DECLARATION(LocalDatetime, bslma::UsesBslmaAllocator)
Definition bdlt_datetimetz.h:308
Definition bslma_bslallocator.h:580
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1126
Definition bslstl_stringview.h:441
Definition bslstl_string.h:1281
basic_string & assign(const basic_string &replacement)
Definition bslstl_string.h:5716
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this string to supply memory.
Definition bslstl_string.h:6723
void clear() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_string.h:5430
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)
basic_string< char > string
Definition bslstl_string.h:782
Definition bdlbb_blob.h:576
STREAM & bdexStreamIn(STREAM &stream, VALUE_TYPE &variable)
Definition bslx_instreamfunctions.h:1247
STREAM & bdexStreamOut(STREAM &stream, const TYPE &value)
Definition bslx_outstreamfunctions.h:992
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