BDE 4.14.0 Production release
Loading...
Searching...
No Matches
bslstl_istringstream.h
Go to the documentation of this file.
1/// @file bslstl_istringstream.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bslstl_istringstream.h -*-C++-*-
8#ifndef INCLUDED_BSLSTL_ISTRINGSTREAM
9#define INCLUDED_BSLSTL_ISTRINGSTREAM
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup bslstl_istringstream bslstl_istringstream
15/// @brief Provide a C++03-compatible `istringstream` class.
16/// @addtogroup bsl
17/// @{
18/// @addtogroup bslstl
19/// @{
20/// @addtogroup bslstl_istringstream
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bslstl_istringstream-purpose"> Purpose</a>
25/// * <a href="#bslstl_istringstream-classes"> Classes </a>
26/// * <a href="#bslstl_istringstream-description"> Description </a>
27/// * <a href="#bslstl_istringstream-memory-allocation"> Memory Allocation </a>
28/// * <a href="#bslstl_istringstream-bslma-style-allocators"> bslma-Style Allocators </a>
29/// * <a href="#bslstl_istringstream-usage"> Usage </a>
30/// * <a href="#bslstl_istringstream-example-1-basic-input-operations"> Example 1: Basic Input Operations </a>
31///
32/// # Purpose {#bslstl_istringstream-purpose}
33/// Provide a C++03-compatible `istringstream` class.
34///
35/// # Classes {#bslstl_istringstream-classes}
36///
37/// - bsl::istringstream: C++03-compatible `istringstream` class
38///
39/// **Canonical header:** bsl_sstream.h
40///
41/// @see
42///
43/// # Description {#bslstl_istringstream-description}
44/// This component is for internal use only. Please include
45/// `<bsl_sstream.h>` instead.
46///
47/// This component defines a class template, `bsl::basic_istringstream`,
48/// implementing a standard input stream that provides a constructor (as well as
49/// a manipulator) allowing clients to set the sequence of characters
50/// from which input is streamed to a supplied `bsl::basic_string` (see
51/// 27.8.3 [istringstream] of the C++11 standard). This component also defines
52/// two standard aliases, `bsl::istringstream` and `bsl::wistringstream`, that
53/// refer to specializations of the `bsl::basic_istringstream` template for
54/// `char` and `wchar_t` types, respectively. The `bsl::basic_istringstream`
55/// template has three parameters, `CHAR_TYPE`, `CHAR_TRAITS`, and `ALLOCATOR`.
56/// The `CHAR_TYPE` and `CHAR_TRAITS` parameters respectively define the
57/// character type for the string-stream and a type providing a set of
58/// operations the string-stream will use to manipulate characters of that type,
59/// which must meet the character traits requirements defined by the C++11
60/// standard, 21.2 [char.traits]. The `ALLOCATOR` template parameter is
61/// described in the "Memory Allocation" section below.
62///
63/// ## Memory Allocation {#bslstl_istringstream-memory-allocation}
64///
65///
66/// The type supplied as a string-stream's `ALLOCATOR` template parameter
67/// determines how that string-stream will allocate memory. The
68/// @ref basic_istringstream template supports allocators meeting the requirements
69/// of the C++11 standard, 17.6.3.5 [allocator.requirements]; in addition, it
70/// supports scoped-allocators derived from the `bslma::Allocator` memory
71/// allocation protocol. Clients intending to use `bslma`-style allocators
72/// should use `bsl::allocator`, which provides a C++11 standard-compatible
73/// adapter for a `bslma::Allocator` object. Note that the standard aliases
74/// `bsl::istringstream` and `bsl::wistringstream` both use `bsl::allocator`.
75///
76/// ### bslma-Style Allocators {#bslstl_istringstream-bslma-style-allocators}
77///
78///
79/// If the type supplied for the `ALLOCATOR` template parameter of an
80/// `istringstream` instantiation is `bsl::allocator`, then objects of that
81/// string-stream type will conform to the standard behavior of a
82/// `bslma`-allocator-enabled type. Such a string-stream accepts an optional
83/// `bslma::Allocator` argument at construction. If the address of a
84/// `bslma::Allocator` object is explicitly supplied at construction, it will be
85/// used to supply memory for the string-stream throughout its lifetime;
86/// otherwise, the string-stream will use the default allocator installed at the
87/// time of the string-stream's construction (see @ref bslma_default ).
88///
89/// ## Usage {#bslstl_istringstream-usage}
90///
91///
92/// This section illustrates intended use of this component.
93///
94/// ### Example 1: Basic Input Operations {#bslstl_istringstream-example-1-basic-input-operations}
95///
96///
97/// The following example demonstrates the use of `bsl::istringstream` to read
98/// data of various types from a `bsl::string` object.
99///
100/// Suppose we want to implement a simplified converter from `bsl::string` to a
101/// generic type, `TYPE`. We use `bsl::istringstream` to implement the
102/// `fromString` function. We initialize the input stream with the string
103/// passed as a parameter and then we read the data from the input stream with
104/// `operator>>`:
105/// @code
106/// template <class TYPE>
107/// TYPE fromString(const bsl::string& from)
108/// {
109/// bsl::istringstream in(from);
110/// TYPE val;
111/// in >> val;
112/// return val;
113/// }
114/// @endcode
115/// Finally, we verify that our `fromString` function works on some simple test
116/// cases:
117/// @code
118/// assert(fromString<int>("1234") == 1234);
119///
120/// assert(fromString<short>("-5") == -5);
121///
122/// assert(fromString<bsl::string>("abc") == "abc");
123/// @endcode
124/// @}
125/** @} */
126/** @} */
127
128/** @addtogroup bsl
129 * @{
130 */
131/** @addtogroup bslstl
132 * @{
133 */
134/** @addtogroup bslstl_istringstream
135 * @{
136 */
137
138#include <bslscm_version.h>
139
140#include <bslma_isstdallocator.h>
142
143#include <bslmf_enableif.h>
144#include <bslmf_issame.h>
145#include <bslmf_movableref.h>
146
148#include <bsls_keyword.h>
149#include <bsls_libraryfeatures.h>
150#include <bsls_platform.h>
151
152#include <bslstl_string.h>
153#include <bslstl_stringview.h>
154#include <bslstl_stringbuf.h>
155
156#include <ios>
157
158#include <istream>
159
160#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
161# include <utility>
162#endif
163
164namespace bsl {
165
166 // =========================
167 // class basic_istringstream
168 // =========================
169
170/// This class implements a standard input stream that provides a
171/// constructor and manipulator for setting the sequence of characters from
172/// which input is streamed to a supplied `bsl::basic_string`.
173template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
175 : private StringBufContainer<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>
176 , public std::basic_istream<CHAR_TYPE, CHAR_TRAITS> {
177
178 private:
179 // PRIVATE TYPES
182 BaseType;
185 typedef std::basic_istream<CHAR_TYPE, CHAR_TRAITS> BaseStream;
186 typedef std::ios_base ios_base;
187
188 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
189
190 private:
191 // NOT IMPLEMENTED
192 basic_istringstream(const basic_istringstream&); // = delete
193 basic_istringstream& operator=(const basic_istringstream&); // = delete
194
195 public:
196 // TYPES
197 typedef CHAR_TYPE char_type;
198 typedef CHAR_TRAITS traits_type;
199 typedef ALLOCATOR allocator_type;
200 typedef typename traits_type::int_type int_type;
201 typedef typename traits_type::off_type off_type;
202 typedef typename traits_type::pos_type pos_type;
203
204 // CREATORS
205
206 explicit
208 explicit
209 basic_istringstream(ios_base::openmode modeBitMask,
211 explicit
212 basic_istringstream(const StringType& initialString,
214 /// Create a @ref basic_istringstream object. Optionally specify a
215 /// `modeBitMask` indicating whether the underlying stream-buffer may
216 /// also be written to (`rdbuf` is created using
217 /// `modeBitMask | ios_base::in`). If `modeBitMask` is not supplied,
218 /// `rdbuf` will be created using `ios_base::in`. Optionally specify an
219 /// `initialString` indicating the sequence of characters from which
220 /// input will be streamed. If `initialString` is not supplied, there
221 /// will not be data to stream (until a subsequent call to the `str`
222 /// manipulator). Optionally specify the `allocator` used to supply
223 /// memory. If `allocator` is not supplied, a default-constructed
224 /// object of the (template parameter) `ALLOCATOR` type is used. If the
225 /// `ALLOCATOR` argument is of type `bsl::allocator` (the default), then
226 /// `allocator`, if supplied, shall be convertible to
227 /// `bslma::Allocator *`. If the `ALLOCATOR` argument is of type
228 /// `bsl::allocator` and `allocator` is not supplied, the currently
229 /// installed default allocator will be used to supply memory. If
230 /// `initialString` is passed by `MovableRef`, it is left in a valid but
231 /// unspecified state.
232 basic_istringstream(const StringType& initialString,
233 ios_base::openmode modeBitMask,
235
236 explicit
238 BloombergLP::bslmf::MovableRef<StringType> initialString);
240 BloombergLP::bslmf::MovableRef<StringType> initialString,
243 BloombergLP::bslmf::MovableRef<StringType> initialString,
244 ios_base::openmode modeBitMask);
245 /// Create a @ref basic_istringstream object. Use the specified
246 /// `initialString` indicating the initial sequence of characters from
247 /// which input will be streamed. Optionally specify a `modeBitMask`
248 /// indicating whether the underlying stream-buffer may also be written
249 /// to (`rdbuf` is created using `modeBitMask | ios_base::in`). If
250 /// `modeBitMask` is not supplied, `rdbuf` will be created using
251 /// `ios_base::in`. Optionally specify the `allocator` used to supply
252 /// memory. If `allocator` is not supplied, the allocator in
253 /// `initialString` is used. `initialString` is left in a valid but
254 /// unspecified state.
256 BloombergLP::bslmf::MovableRef<StringType> initialString,
257 ios_base::openmode modeBitMask,
259
260 /// Create a @ref basic_istringstream object. Use the specified
261 /// `initialString` indicating the sequence of characters from which
262 /// input will be streamed. `rdbuf` is created using `ios_base::in`.
263 /// Optionally specify the `allocator` used to supply memory. If
264 /// `allocator` is not supplied, a default-constructed object of the
265 /// (template parameter) `ALLOCATOR` type is used. If the `ALLOCATOR`
266 /// argument is of type `bsl::allocator` (the default), then
267 /// `allocator`, if supplied, shall be convertible to
268 /// `bslma::Allocator *`. If the `ALLOCATOR` argument is of type
269 /// `bsl::allocator` and `allocator` is not supplied, the currently
270 /// installed default allocator will be used to supply memory.
271 ///
272 /// Note: implemented inline due to Sun CC compilation error.
273 template <class SALLOC>
276 initialString,
278 typename bsl::enable_if<
279 !bsl::is_same<ALLOCATOR, SALLOC>::value, void *>::type = 0)
280 : BaseType(initialString.begin(),
281 initialString.end(),
282 ios_base::in,
283 allocator)
284 , BaseStream(BaseType::rdbuf())
285 {
286 }
287
288 /// Create a @ref basic_istringstream object. Use the specified
289 /// `initialString` indicating the sequence of characters from which
290 /// input will be streamed. Use the specified `modeBitMask` to indicate
291 /// whether this buffer may be read from, written to, or both.
292 /// Optionally specify the `allocator` used to supply memory. If
293 /// `allocator` is not supplied, a default-constructed object of the
294 /// (template parameter) `ALLOCATOR` type is used. If the `ALLOCATOR`
295 /// argument is of type `bsl::allocator` (the default), then
296 /// `allocator`, if supplied, shall be convertible to
297 /// `bslma::Allocator *`. If the `ALLOCATOR` argument is of type
298 /// `bsl::allocator` and `allocator` is not supplied, the currently
299 /// installed default allocator will be used to supply memory.
300 ///
301 /// Note: implemented inline due to Sun CC compilation error.
302 template <class SALLOC>
305 initialString,
306 ios_base::openmode modeBitMask,
308 typename bsl::enable_if<
309 !bsl::is_same<ALLOCATOR, SALLOC>::value, void *>::type = 0)
310 : BaseType(initialString.begin(),
311 initialString.end(),
312 modeBitMask | ios_base::in,
313 allocator)
314 , BaseStream(BaseType::rdbuf())
315 {
316 }
317
318#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
319 /// Create a @ref basic_istringstream object having the same value as the
320 /// specified `original` object by moving the contents of `original` to
321 /// the newly-created object. `original` is left in a valid but
322 /// unspecified state.
324#endif
325
327 // Destroy this object.
328
329 // MANIPULATORS
330#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
331 /// Assign to this object the value of the specified `rhs`, and return a
332 /// reference providing modifiable access to this object. The contents
333 /// of `rhs` are move-assigned to this object. `rhs` is left in a valid
334 /// but unspecified state.
336#endif
337
338 /// Reset the internally buffered sequence of characters provided as
339 /// input by this stream to the specified `value`. If `value` is passed
340 /// by `MovableRef`, it is left in a valid but unspecified state.
341 ///
342 void str(const StringType& value);
343 /// Note: implemented inline due to Sun CC compilation error.
344 void str(BloombergLP::bslmf::MovableRef<StringType> value);
345 template <class SALLOC>
346 typename
349 {
350 this->rdbuf()->str(value);
351 }
352
353#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
354 /// Return the internally buffered sequence of characters maintained by
355 /// this stream, leaving the stream empty.
356 StringType str() &&;
357#endif
358
359 // ACCESSORS
360
361 /// Return an address providing modifiable access to the
362 /// @ref basic_stringbuf object that is internally used by this string
363 /// stream to buffer unformatted characters.
364 StreamBufType *rdbuf() const;
365
366#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
367 StringType str() const &;
368#else
369 StringType str() const;
370#endif
371 // Return the internally buffered sequence of characters maintained by
372 // this stream object.
373
374#ifndef BSLS_PLATFORM_CMP_SUN
375 // To be enabled once DRQS 168075157 is resolved
376
377 /// Return a copy of the internally buffered sequence of characters
378 /// maintained by this stream object in a @ref basic_string that uses the
379 /// specified `allocator`.
380 ///
381 /// Note: implemented inline due to Sun CC compilation error.
382 template <class SALLOC>
383 typename bsl::enable_if<
384 bsl::IsStdAllocator<SALLOC>::value,
386 str(const SALLOC& allocator) const
387 {
388 return this->rdbuf()->str(allocator);
389 }
390#endif
391
392 /// Return a view of the internally buffered sequence of characters
393 /// maintained by this stream object.
394 ViewType view() const BSLS_KEYWORD_NOEXCEPT;
395};
396
397// STANDARD TYPEDEFS
398typedef basic_istringstream<char, char_traits<char>, allocator<char> >
400typedef basic_istringstream<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >
402
403// ============================================================================
404// TEMPLATE FUNCTION DEFINITIONS
405// ============================================================================
406
407 // -------------------------
408 // class basic_istringstream
409 // -------------------------
410
411// CREATORS
412template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
413inline
414basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
416: BaseType(ios_base::in, allocator)
417, BaseStream(BaseType::rdbuf())
418{
419}
420
421template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
422inline
424basic_istringstream(ios_base::openmode modeBitMask,
426: BaseType(modeBitMask | ios_base::in, allocator)
427, BaseStream(BaseType::rdbuf())
428{
429}
430
431template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
432inline
434basic_istringstream(const StringType& initialString,
436: BaseType(initialString, ios_base::in, allocator)
437, BaseStream(BaseType::rdbuf())
438{
439}
440
441template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
442inline
444basic_istringstream(const StringType& initialString,
445 ios_base::openmode modeBitMask,
447: BaseType(initialString, modeBitMask | ios_base::in, allocator)
448, BaseStream(BaseType::rdbuf())
449{
450}
451
452template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
453inline
455basic_istringstream(BloombergLP::bslmf::MovableRef<StringType> initialString)
456: BaseType(MoveUtil::move(initialString), ios_base::in)
457, BaseStream(BaseType::rdbuf())
458{
459}
460
461template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
462inline
464basic_istringstream(BloombergLP::bslmf::MovableRef<StringType> initialString,
466: BaseType(MoveUtil::move(initialString), ios_base::in, allocator)
467, BaseStream(BaseType::rdbuf())
468{
469}
470
471template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
472inline
474basic_istringstream(BloombergLP::bslmf::MovableRef<StringType> initialString,
475 ios_base::openmode modeBitMask)
476: BaseType(MoveUtil::move(initialString), modeBitMask | ios_base::in)
477, BaseStream(BaseType::rdbuf())
478{
479}
480
481template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
482inline
484basic_istringstream(BloombergLP::bslmf::MovableRef<StringType> initialString,
485 ios_base::openmode modeBitMask,
487: BaseType(MoveUtil::move(initialString),
488 modeBitMask | ios_base::in,
489 allocator)
490, BaseStream(BaseType::rdbuf())
491{
492}
493
494#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
495template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
496inline
499: BaseType(std::move(original))
500, BaseStream(std::move(original))
501{
502 BaseStream::set_rdbuf(BaseType::rdbuf());
503}
504#endif
505
506// MANIPULATORS
507#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_STREAM_MOVE
508template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
509inline
510basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>&
511basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::
512operator=(basic_istringstream&& rhs)
513{
514 this->BaseType::operator=(std::move(rhs));
515 this->BaseStream::operator=(std::move(rhs));
516
517 return *this;
518}
519#endif
520
521template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
522inline
524 const StringType& value)
525{
526 this->rdbuf()->str(value);
527}
528
529template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
530inline
532 BloombergLP::bslmf::MovableRef<StringType> value)
533{
534 this->rdbuf()->str(MoveUtil::move(value));
535}
536
537#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
538template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
539inline
542{
543 return std::move(*this->rdbuf()).str();
544}
545#endif
546
547// ACCESSORS
548template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
549inline
550typename
551basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StreamBufType *
553{
554 return this->BaseType::rdbuf();
555}
556
557#ifdef BSLS_COMPILERFEATURES_SUPPORT_REF_QUALIFIERS
558template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
559inline
562{
563 return this->rdbuf()->str();
564}
565#else
566template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
567inline
568typename basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR>::StringType
570{
571 return this->rdbuf()->str();
572}
573#endif
574
575template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
576inline
580{
581 return this->rdbuf()->view();
582}
583
584} // close namespace bsl
585
586// ============================================================================
587// TYPE TRAITS
588// ============================================================================
589
590
591namespace bslma {
592
593template <class CHAR_TYPE, class CHAR_TRAITS, class ALLOCATOR>
595 bsl::basic_istringstream<CHAR_TYPE, CHAR_TRAITS, ALLOCATOR> >
597{};
598
599} // close namespace bslma
600
601
602#endif
603
604// ----------------------------------------------------------------------------
605// Copyright 2013 Bloomberg Finance L.P.
606//
607// Licensed under the Apache License, Version 2.0 (the "License");
608// you may not use this file except in compliance with the License.
609// You may obtain a copy of the License at
610//
611// http://www.apache.org/licenses/LICENSE-2.0
612//
613// Unless required by applicable law or agreed to in writing, software
614// distributed under the License is distributed on an "AS IS" BASIS,
615// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
616// See the License for the specific language governing permissions and
617// limitations under the License.
618// ----------------------------- END-OF-FILE ----------------------------------
619
620/** @} */
621/** @} */
622/** @} */
Definition bslstl_stringbuf.h:746
StreamBufType * rdbuf() const
Definition bslstl_stringbuf.h:864
Definition bslma_bslallocator.h:580
Definition bslstl_istringstream.h:176
bsl::enable_if< bsl::IsStdAllocator< SALLOC >::value, basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > >::type str(const SALLOC &allocator) const
Definition bslstl_istringstream.h:386
CHAR_TRAITS traits_type
Definition bslstl_istringstream.h:198
basic_istringstream(const bsl::basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &initialString, ios_base::openmode modeBitMask, const allocator_type &allocator=allocator_type(), typename bsl::enable_if< !bsl::is_same< ALLOCATOR, SALLOC >::value, void * >::type=0)
Definition bslstl_istringstream.h:303
basic_istringstream(const bsl::basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &initialString, const allocator_type &allocator=allocator_type(), typename bsl::enable_if< !bsl::is_same< ALLOCATOR, SALLOC >::value, void * >::type=0)
Definition bslstl_istringstream.h:274
ALLOCATOR allocator_type
Definition bslstl_istringstream.h:199
traits_type::int_type int_type
Definition bslstl_istringstream.h:200
traits_type::pos_type pos_type
Definition bslstl_istringstream.h:202
ViewType view() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_istringstream.h:578
bsl::enable_if<!bsl::is_same< ALLOCATOR, SALLOC >::value, void >::type str(const basic_string< CHAR_TYPE, CHAR_TRAITS, SALLOC > &value)
Definition bslstl_istringstream.h:348
StringType str() const
Definition bslstl_istringstream.h:569
CHAR_TYPE char_type
Definition bslstl_istringstream.h:197
traits_type::off_type off_type
Definition bslstl_istringstream.h:201
StreamBufType * rdbuf() const
Definition bslstl_istringstream.h:552
Definition bslstl_stringview.h:441
Definition bslstl_string.h:1281
Definition bslstl_stringbuf.h:245
void str(const StringType &value)
Definition bslstl_stringbuf.h:1538
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:632
Definition bdlb_printmethods.h:283
T::iterator begin(T &container)
Definition bslstl_iterator.h:1495
T::iterator end(T &container)
Definition bslstl_iterator.h:1523
Definition balxml_encoderoptions.h:68
Definition bdldfp_decimal.h:5188
Definition bslmf_enableif.h:525
Definition bslmf_issame.h:146
Definition bslma_usesbslmaallocator.h:343