111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Position types -*- C++ -*- 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Copyright (C) 1997-2014 Free Software Foundation, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is part of the GNU ISO C++ Library. This library is free 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// software; you can redistribute it and/or modify it under the 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// terms of the GNU General Public License as published by the 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Free Software Foundation; either version 3, or (at your option) 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// any later version. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This library is distributed in the hope that it will be useful, 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// but WITHOUT ANY WARRANTY; without even the implied warranty of 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// GNU General Public License for more details. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Under Section 7 of GPL version 3, you are granted additional 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// permissions described in the GCC Runtime Library Exception, version 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 3.1, as published by the Free Software Foundation. 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// You should have received a copy of the GNU General Public License and 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// a copy of the GCC Runtime Library Exception along with this program; 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <http://www.gnu.org/licenses/>. 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/** @file bits/postypes.h 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This is an internal header file, included by other library headers. 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Do not attempt to use it directly. @headername{iosfwd} 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// ISO C++ 14882: 27.4.1 - Types 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// ISO C++ 14882: 27.4.3 - Template class fpos 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _GLIBCXX_POSTYPES_H 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _GLIBCXX_POSTYPES_H 1 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#pragma GCC system_header 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cwchar> // For mbstate_t 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// XXX If <stdint.h> is really needed, make sure to define the macros 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// before including it, in order not to break <tr1/cstdint> (and <cstdint> 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// in C++0x). Reconsider all this as soon as possible... 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if (defined(_GLIBCXX_HAVE_INT64_T) && !defined(_GLIBCXX_HAVE_INT64_T_LONG) \ 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert && !defined(_GLIBCXX_HAVE_INT64_T_LONG_LONG)) 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __STDC_LIMIT_MACROS 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _UNDEF__STDC_LIMIT_MACROS 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define __STDC_LIMIT_MACROS 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef __STDC_CONSTANT_MACROS 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _UNDEF__STDC_CONSTANT_MACROS 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define __STDC_CONSTANT_MACROS 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stdint.h> // For int64_t 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef _UNDEF__STDC_LIMIT_MACROS 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# undef __STDC_LIMIT_MACROS 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# undef _UNDEF__STDC_LIMIT_MACROS 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef _UNDEF__STDC_CONSTANT_MACROS 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# undef __STDC_CONSTANT_MACROS 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# undef _UNDEF__STDC_CONSTANT_MACROS 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace std _GLIBCXX_VISIBILITY(default) 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_GLIBCXX_BEGIN_NAMESPACE_VERSION 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The types streamoff, streampos and wstreampos and the class 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // template fpos<> are described in clauses 21.1.2, 21.1.3, 27.1.2, 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // 27.2, 27.4.1, 27.4.3 and D.6. Despite all this verbiage, the 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // behaviour of these types is mostly implementation defined or 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // unspecified. The behaviour in this implementation is as noted 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // below. 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /** 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @brief Type used by fpos, char_traits<char>, and char_traits<wchar_t>. 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * In clauses 21.1.3.1 and 27.4.1 streamoff is described as an 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * implementation defined type. 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Note: In versions of GCC up to and including GCC 3.3, streamoff 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * was typedef long. 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef _GLIBCXX_HAVE_INT64_T_LONG 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef long streamoff; 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(_GLIBCXX_HAVE_INT64_T_LONG_LONG) 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef long long streamoff; 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(_GLIBCXX_HAVE_INT64_T) 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef int64_t streamoff; 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef long long streamoff; 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Integral type for I/O operation counts and buffer sizes. 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef ptrdiff_t streamsize; // Signed integral type 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /** 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @brief Class representing stream positions. 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The standard places no requirements upon the template parameter StateT. 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * In this implementation StateT must be DefaultConstructible, 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * CopyConstructible and Assignable. The standard only requires that fpos 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * should contain a member of type StateT. In this implementation it also 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * contains an offset stored as a signed integer. 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @param StateT Type passed to and returned from state(). 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _StateT> 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert class fpos 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert private: 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert streamoff _M_off; 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StateT _M_state; 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert public: 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard doesn't require that fpos objects can be default 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // constructed. This implementation provides a default 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // constructor that initializes the offset to 0 and default 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // constructs the state. 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos() 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_off(0), _M_state() { } 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard requires that fpos objects can be constructed 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // from streamoff objects using the constructor syntax, and 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // fails to give any meaningful semantics. In this 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // implementation implicit conversion is also allowed, and this 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // constructor stores the streamoff as the offset and default 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // constructs the state. 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Construct position from offset. 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos(streamoff __off) 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_off(__off), _M_state() { } 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Convert to streamoff. 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator streamoff() const { return _M_off; } 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Remember the value of @a st. 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert state(_StateT __st) 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_state = __st; } 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Return the last set value of @a st. 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StateT 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert state() const 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_state; } 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard requires that this operator must be defined, but 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // gives no semantics. In this implementation it just adds its 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // argument to the stored offset and returns *this. 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Add offset to this position. 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos& 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator+=(streamoff __off) 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_off += __off; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard requires that this operator must be defined, but 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // gives no semantics. In this implementation it just subtracts 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // its argument from the stored offset and returns *this. 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Subtract offset from this position. 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos& 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator-=(streamoff __off) 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_off -= __off; 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard requires that this operator must be defined, but 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // defines its semantics only in terms of operator-. In this 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // implementation it constructs a copy of *this, adds the 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // argument to that copy using operator+= and then returns the 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // copy. 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Add position and offset. 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator+(streamoff __off) const 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos __pos(*this); 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __pos += __off; 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return __pos; 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard requires that this operator must be defined, but 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // defines its semantics only in terms of operator+. In this 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // implementation it constructs a copy of *this, subtracts the 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // argument from that copy using operator-= and then returns the 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // copy. 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Subtract offset from position. 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator-(streamoff __off) const 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fpos __pos(*this); 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __pos -= __off; 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return __pos; 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard requires that this operator must be defined, but 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // defines its semantics only in terms of operator+. In this 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // implementation it returns the difference between the offset 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // stored in *this and in the argument. 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Subtract position to return offset. 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert streamoff 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator-(const fpos& __other) const 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return _M_off - __other._M_off; } 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert }; 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The standard only requires that operator== must be an 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // equivalence relation. In this implementation two fpos<StateT> 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // objects belong to the same equivalence class if the contained 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // offsets compare equal. 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// Test if equivalent to another position. 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _StateT> 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline bool 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return streamoff(__lhs) == streamoff(__rhs); } 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template<typename _StateT> 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert inline bool 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return streamoff(__lhs) != streamoff(__rhs); } 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Clauses 21.1.3.1 and 21.1.3.2 describe streampos and wstreampos 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // as implementation defined types, but clause 27.2 requires that 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // they must both be typedefs for fpos<mbstate_t> 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// File position for char streams. 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef fpos<mbstate_t> streampos; 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// File position for wchar_t streams. 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef fpos<mbstate_t> wstreampos; 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if __cplusplus >= 201103L 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// File position for char16_t streams. 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef fpos<mbstate_t> u16streampos; 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /// File position for char32_t streams. 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef fpos<mbstate_t> u32streampos; 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_GLIBCXX_END_NAMESPACE_VERSION 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} // namespace 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 243