Cleanup and update docs

This commit is contained in:
Krystian Stasiowski
2019-11-08 21:16:41 -05:00
parent 566a163536
commit 4c0a93d679
10 changed files with 286 additions and 180 deletions

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com) # Copyright (c) 2013-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
# #
# Distributed under the Boost Software License, Version 1.0. (See accompanying # Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

View File

@ -2,14 +2,15 @@
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "../../../../tools/boostbook/dtd/boostbook.dtd"> <!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" "../../../../tools/boostbook/dtd/boostbook.dtd">
<!-- <!--
Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
Copyright (c) 2019 Krystian Stasiowski (sdkrystian at gmail dot com)
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Official repository: https://github.com/vinniefalco/json Official repository: https://github.com/boostorg/fixed_string
--> -->
<section id="json.index"> <section id="fixed_string.index">
<title>Index</title> <title>Index</title>
<index/> <index/>
</section> </section>

View File

@ -5,11 +5,11 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Official repository: https://github.com/vinniefalco/fixed_string Official repository: https://github.com/boostorg/fixed_string
] ]
[library Boost.FixedString [library Boost.FixedString
[id json] [id fixed_string]
[quickbook 1.6] [quickbook 1.6]
[copyright 2016 - 2019 Vinnie Falco] [copyright 2016 - 2019 Vinnie Falco]
[copyright 2019 Krystian Stasiowski] [copyright 2019 Krystian Stasiowski]
@ -32,6 +32,8 @@
[template include_file[path][^<'''<ulink url="../../../../'''[path]'''">'''[path]'''</ulink>'''>]] [template include_file[path][^<'''<ulink url="../../../../'''[path]'''">'''[path]'''</ulink>'''>]]
[template issue[n] '''<ulink url="https://github.com/boostorg/beast/issues/'''[n]'''">#'''[n]'''</ulink>'''] [template issue[n] '''<ulink url="https://github.com/boostorg/beast/issues/'''[n]'''">#'''[n]'''</ulink>''']
[def __InputIterator__ [@https://en.cppreference.com/w/cpp/named_req/InputIterator ['InputIterator]]]
[/-----------------------------------------------------------------------------] [/-----------------------------------------------------------------------------]
[section Introduction] [section Introduction]

View File

@ -7,7 +7,7 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Official repository: https://github.com/boostorg/beast Official repository: https://github.com/boostorg/fixed_string
--> -->
<informaltable frame="all"> <informaltable frame="all">

View File

@ -1,36 +1,3 @@
<!-- CLASS_DETAIL_TEMPLATE BEGIN --> <!-- CLASS_DETAIL_TEMPLATE BEGIN -->
<xsl:when test="$normal-tparam = 'Allocator'"> <xsl:text>__Allocator__</xsl:text></xsl:when> <xsl:when test="$normal-tparam = 'InputIterator'"><xsl:text>__InputIterator__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'AsyncStream'"> <xsl:text>__AsyncStream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'AsyncReadStream'"> <xsl:text>__AsyncReadStream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'AsyncWriteStream'"> <xsl:text>__AsyncWriteStream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Body'"> <xsl:text>__Body__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'BufferSequence'"> <xsl:text>__BufferSequence__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'BufferSequence'"> <xsl:text>__BufferSequence__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'CompletionCondition'"> <xsl:text>__CompletionCondition__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'CompletionHandler'"> <xsl:text>__CompletionHandler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'CompletionToken'"> <xsl:text>__CompletionToken__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'ConnectCondition'"> <xsl:text>__ConnectCondition__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'ConnectHandler'"> <xsl:text>__ConnectHandler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'ConstBufferSequence'"> <xsl:text>__ConstBufferSequence__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'DynamicBuffer'"> <xsl:text>__DynamicBuffer__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'EndpointSequence'"> <xsl:text>__EndpointSequence__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'ExecutionContext'"> <xsl:text>__ExecutionContext__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Executor'"> <xsl:text>__Executor__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Executor_'"> <xsl:text>__Executor__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Executor1'"> <xsl:text>__Executor1__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Executor2'"> <xsl:text>__Executor2__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Fields'"> <xsl:text>__Fields__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Handler'"> <xsl:text>__Handler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Handler_'"> <xsl:text>__Handler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'IteratorConnectHandler'"> <xsl:text>__IteratorConnectHandler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'MutableBufferSequence'"> <xsl:text>__MutableBufferSequence__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Protocol'"> <xsl:text>__Protocol__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'RangeConnectHandler'"> <xsl:text>__RangeConnectHandler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'RatePolicy'"> <xsl:text>__RatePolicy__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'ReadHandler'"> <xsl:text>__ReadHandler__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'Stream'"> <xsl:text>__Stream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'SyncStream'"> <xsl:text>__SyncStream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'SyncReadStream'"> <xsl:text>__SyncReadStream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'SyncWriteStream'"> <xsl:text>__SyncWriteStream__</xsl:text></xsl:when>
<xsl:when test="$normal-tparam = 'WriteHandler'"> <xsl:text>__WriteHandler__</xsl:text></xsl:when>
<!-- CLASS_DETAIL_TEMPLATE END --> <!-- CLASS_DETAIL_TEMPLATE END -->

View File

@ -1,6 +1,6 @@
<!-- Variables (Edit for your project) --> <!-- Variables (Edit for your project) -->
<xsl:variable name="doc-ref" select="'json.ref.'"/> <xsl:variable name="doc-ref" select="'fixed_string.ref.'"/>
<xsl:variable name="doc-ns" select="'boost::json'"/> <xsl:variable name="doc-ns" select="'boost::fixed_string'"/>
<xsl:variable name="debug" select="0"/> <xsl:variable name="debug" select="0"/>
<xsl:variable name="private" select="0"/> <xsl:variable name="private" select="0"/>
<!-- End Variables --> <!-- End Variables -->

View File

@ -1,19 +1,7 @@
<!-- INCLUDES_FOOT_TEMPLATE BEGIN --> <!-- INCLUDES_FOOT_TEMPLATE BEGIN -->
<xsl:choose> <xsl:choose>
<xsl:when test="contains($file, 'boost/beast/core')"> <xsl:when test="contains($file, 'supercalifragilisticexpialidocious')">
<xsl:text>&#xd;&#xd;Convenience header [include_file boost/beast/core.hpp]&#xd;</xsl:text> <xsl:text>&#xd;&#xd;Easter Egg&#xd;</xsl:text>
</xsl:when>
<xsl:when test="contains($file, 'boost/beast/http')">
<xsl:text>&#xd;&#xd;Convenience header [include_file boost/beast/http.hpp]&#xd;</xsl:text>
</xsl:when>
<xsl:when test="contains($file, 'boost/beast/ssl')">
<xsl:text>&#xd;&#xd;Convenience header [include_file boost/beast/ssl.hpp]&#xd;</xsl:text>
</xsl:when>
<xsl:when test="contains($file, 'boost/beast/websocket')">
<xsl:text>&#xd;&#xd;Convenience header [include_file boost/beast/websocket.hpp]&#xd;</xsl:text>
</xsl:when>
<xsl:when test="contains($file, 'boost/beast/zlib')">
<xsl:text>&#xd;&#xd;Convenience header [include_file boost/beast/zlib.hpp]&#xd;</xsl:text>
</xsl:when> </xsl:when>
</xsl:choose> </xsl:choose>
<!-- INCLUDES_FOOT_TEMPLATE END --> <!-- INCLUDES_FOOT_TEMPLATE END -->

View File

@ -159,11 +159,11 @@ raw_to_string(CharT* last, std::size_t size, Integer i)
template< template<
typename Traits, typename Traits,
typename CharT, typename CharT,
typename ForwardIt> typename ForwardIterator>
inline inline
ForwardIt ForwardIterator
find_not_of( find_not_of(
ForwardIt first, ForwardIt last, const CharT* str, std::size_t n) noexcept ForwardIterator first, ForwardIterator last, const CharT* str, std::size_t n) noexcept
{ {
for (; first != last; ++first) for (; first != last; ++first)
if (!Traits::find(str, n, *first)) if (!Traits::find(str, n, *first))

View File

@ -131,13 +131,13 @@ public:
CharT const* s); CharT const* s);
/// Construct from a range of characters /// Construct from a range of characters
template<class InputIt> template<class InputIterator>
fixed_string( fixed_string(
InputIt first, InputIterator first,
InputIt last InputIterator last
#ifndef GENERATING_DOCUMENTATION #ifndef GENERATING_DOCUMENTATION
, typename std::enable_if< , typename std::enable_if<
detail::is_input_iterator<InputIt>::value, detail::is_input_iterator<InputIterator>::value,
iterator>::type* = 0 iterator>::type* = 0
#endif #endif
); );
@ -184,7 +184,7 @@ public:
// //
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
/** Copy assignment /** Assign to the string.
If `*this` and `s` are the same object, If `*this` and `s` are the same object,
this function has no effect. this function has no effect.
@ -196,7 +196,9 @@ public:
return assign(s); return assign(s);
} }
/** Replace the contents with a copy of `s` /** Assign to the string.
Replace the contents with a copy of `s`
@throw std::length_error if `s.size() > max_size()` @throw std::length_error if `s.size() > max_size()`
*/ */
@ -208,7 +210,9 @@ public:
return assign(s); return assign(s);
} }
/** Replace the contents with those of the null-terminated string `s` /** Assign to the string.
Replace the contents with those of the null-terminated string `s`
@throw std::length_error if `Traits::length(s) > max_size()` @throw std::length_error if `Traits::length(s) > max_size()`
*/ */
@ -219,7 +223,10 @@ public:
return assign(s); return assign(s);
} }
/// Assign from single character. /** Assign to the string.
Assign from single character.
*/
fixed_string& fixed_string&
operator=( operator=(
CharT ch) CharT ch)
@ -228,7 +235,10 @@ public:
std::integral_constant<bool, (N>0)>{}); std::integral_constant<bool, (N>0)>{});
} }
/// Assign from initializer list. /** Assign to the string.
Assign from initializer list.
*/
fixed_string& fixed_string&
operator=( operator=(
std::initializer_list<CharT> ilist) std::initializer_list<CharT> ilist)
@ -236,7 +246,10 @@ public:
return assign(ilist); return assign(ilist);
} }
/// Assign from `string_view_type`. /** Assign to the string.
Assign from `string_view_type`.
*/
fixed_string& fixed_string&
operator=( operator=(
string_view_type sv) string_view_type sv)
@ -244,7 +257,9 @@ public:
return assign(sv); return assign(sv);
} }
/** Replace the contents with `count` copies of character `ch` /** Replace the contents.
Replace the contents with `count` copies of character `ch`
@throw std::length_error if `count > max_size()` @throw std::length_error if `count > max_size()`
@return `*this` @return `*this`
@ -254,7 +269,9 @@ public:
size_type count, size_type count,
CharT ch); CharT ch);
/** Replace the contents with a copy of another `fixed_string` /** Replace the contents.
Replace the contents with a copy of another `fixed_string`
@return `*this` @return `*this`
*/ */
@ -262,7 +279,9 @@ public:
assign( assign(
fixed_string const& s) noexcept; fixed_string const& s) noexcept;
/** Replace the contents with a copy of another `fixed_string` /** Replace the contents.
Replace the contents with a copy of another `fixed_string`
@throw std::length_error if `s.size() > max_size()` @throw std::length_error if `s.size() > max_size()`
@return `*this` @return `*this`
@ -278,7 +297,9 @@ public:
return assign(s.data(), s.size()); return assign(s.data(), s.size());
} }
/** Replace the contents with a copy of `count` characters starting at `npos` from `s`. /** Replace the contents.
Replace the contents with a copy of `count` characters starting at `npos` from `s`.
@throw std::length_error if `count > max_size()` @throw std::length_error if `count > max_size()`
@return `*this` @return `*this`
@ -290,7 +311,9 @@ public:
size_type pos, size_type pos,
size_type count = npos); size_type count = npos);
/** Replace the contents with the first `count` characters of `s`, including nulls. /** Replace the contents.
Replace the contents with the first `count` characters of `s`, including nulls.
@throw std::length_error if `count > max_size()` @throw std::length_error if `count > max_size()`
@return `*this` @return `*this`
@ -300,7 +323,9 @@ public:
CharT const* s, CharT const* s,
size_type count); size_type count);
/** Replace the contents with a copy of a null terminated string `s` /** Replace the contents.
Replace the contents with a copy of a null terminated string `s`
@throw std::length_error if `Traits::length(s) > max_size()` @throw std::length_error if `Traits::length(s) > max_size()`
@return `*this` @return `*this`
@ -312,24 +337,28 @@ public:
return assign(s, Traits::length(s)); return assign(s, Traits::length(s));
} }
/** Replace the contents with a copy of characters from the range `(first, last)` /** Replace the contents.
Replace the contents with a copy of characters from the range `(first, last)`
@throw std::length_error if `std::distance(first, last) > max_size()` @throw std::length_error if `std::distance(first, last) > max_size()`
@return `*this` @return `*this`
*/ */
template<typename InputIt> template<typename InputIterator>
#ifdef GENERATING_DOCUMENTATION #ifdef GENERATING_DOCUMENTATION
fixed_string& fixed_string&
#else #else
typename std::enable_if< typename std::enable_if<
detail::is_input_iterator<InputIt>::value, detail::is_input_iterator<InputIterator>::value,
fixed_string&>::type fixed_string&>::type
#endif #endif
assign( assign(
InputIt first, InputIterator first,
InputIt last); InputIterator last);
/** Replace the contents with the characters in an initializer list /** Replace the contents.
Replace the contents with the characters in an initializer list
@throw std::length_error if `ilist.size() > max_size()` @throw std::length_error if `ilist.size() > max_size()`
@return `*this` @return `*this`
@ -341,7 +370,9 @@ public:
return assign(ilist.begin(), ilist.end()); return assign(ilist.begin(), ilist.end());
} }
/** Replace the contents with a copy of the characters from `string_view_type{t}` /** Replace the contents.
Replace the contents with a copy of the characters from `string_view_type{t}`
@throw std::length_error if `string_view_type{t}.size() > max_size()` @throw std::length_error if `string_view_type{t}.size() > max_size()`
*/ */
@ -360,7 +391,9 @@ public:
return assign(ss.data(), ss.size()); return assign(ss.data(), ss.size());
} }
/** Replace the contents with a copy of the characters from `string_view_type{t}.substr(pos, count)` /** Replace the contents.
Replace the contents with a copy of the characters from `string_view_type{t}.substr(pos, count)`
The range `[pos, count)` is extracted from the value The range `[pos, count)` is extracted from the value
obtained by converting `t` to `string_view_type`, obtained by converting `t` to `string_view_type`,
@ -661,7 +694,9 @@ public:
void void
clear(); clear();
/** Inserts `count` copies of character `ch` at the position `index` /** Insert into the string.
Inserts `count` copies of character `ch` at the position `index`
@throw std::out_of_range if `index > size()` @throw std::out_of_range if `index > size()`
@throw std::length_error if `size() + count > max_size()` @throw std::length_error if `size() + count > max_size()`
@ -673,7 +708,9 @@ public:
size_type count, size_type count,
CharT ch); CharT ch);
/** Inserts null-terminated string pointed to by `s` at the position `index` /** Insert into the string.
Inserts null-terminated string pointed to by `s` at the position `index`
@throw std::out_of_range if `index > size()` @throw std::out_of_range if `index > size()`
@throw std::length_error if `size() + count > max_size()` @throw std::length_error if `size() + count > max_size()`
@ -687,7 +724,9 @@ public:
return insert(index, s, Traits::length(s)); return insert(index, s, Traits::length(s));
} }
/** Inserts the characters in the range `(s, s+count)` at the position `index` /** Insert into the string.
Inserts the characters in the range `(s, s+count)` at the position `index`
The inserted string can contain null characters. The inserted string can contain null characters.
@ -701,7 +740,9 @@ public:
CharT const* s, CharT const* s,
size_type count); size_type count);
/** Inserts the contents of string view `sv` at the position `index` /** Insert into the string.
Inserts the contents of string view `sv` at the position `index`
The inserted string can contain null characters. The inserted string can contain null characters.
@ -717,7 +758,9 @@ public:
return insert(index, sv.data(), sv.size()); return insert(index, sv.data(), sv.size());
} }
/** Inserts the string `sv.substr(index_str, count)` at the position `index` /** Insert into the string.
Inserts the string `sv.substr(index_str, count)` at the position `index`
The inserted string can contain null characters. The inserted string can contain null characters.
@ -735,7 +778,9 @@ public:
return insert(index, sv.substr(index_str, count)); return insert(index, sv.substr(index_str, count));
} }
/** Inserts character `ch` before the character (if any) pointed by `pos` /** Insert into the string.
Inserts character `ch` before the character (if any) pointed by `pos`
The inserted character can be null. The inserted character can be null.
@ -750,7 +795,9 @@ public:
return insert(pos, 1, ch); return insert(pos, 1, ch);
} }
/** Inserts `count` copies of character `ch` before the character (if any) pointed by `pos` /** Insert into the string.
Inserts `count` copies of character `ch` before the character (if any) pointed by `pos`
The inserted characters can be null. The inserted characters can be null.
@ -763,29 +810,33 @@ public:
size_type count, size_type count,
CharT ch); CharT ch);
/** Inserts characters from the range `(first, last)` before the element (if any) pointed by `pos` /** Insert into the string.
Inserts characters from the range `(first, last)` before the element (if any) pointed by `pos`
The inserted string can contain null characters. The inserted string can contain null characters.
This function does not participate in overload resolution if This function does not participate in overload resolution if
`InputIt` does not satisfy <em>LegacyInputIterator</em> `InputIterator` does not satisfy <em>LegacyInputIterator</em>
@throw std::length_error if `size() + std::distance(first, last) > max_size()` @throw std::length_error if `size() + std::distance(first, last) > max_size()`
@return An iterator to the first inserted character or pos if no insertion took place @return An iterator to the first inserted character or pos if no insertion took place
*/ */
template<typename InputIt> template<typename InputIterator>
#if GENERATING_DOCUMENTATION #if GENERATING_DOCUMENTATION
iterator iterator
#else #else
typename std::enable_if< typename std::enable_if<
detail::is_input_iterator<InputIt>::value, detail::is_input_iterator<InputIterator>::value,
iterator>::type iterator>::type
#endif #endif
insert( insert(
const_iterator pos, const_iterator pos,
InputIt first, InputIterator first,
InputIt last); InputIterator last);
/** Inserts elements from initializer list `ilist` before the element (if any) pointed by `pos` /** Insert into the string.
Inserts elements from initializer list `ilist` before the element (if any) pointed by `pos`
The inserted string can contain null characters. The inserted string can contain null characters.
@ -800,7 +851,9 @@ public:
return insert(pos, ilist.begin(), ilist.end()); return insert(pos, ilist.begin(), ilist.end());
} }
/** Inserts elements from `string_view{t}` at the position `index` /** Insert into the string.
Inserts elements from `string_view{t}` at the position `index`
The inserted string can contain null characters. The inserted string can contain null characters.
This function participates in overload resolution if This function participates in overload resolution if
@ -825,7 +878,9 @@ public:
size_type index, size_type index,
T const& t); T const& t);
/** Inserts elements from `string_view{t}.substr(index_str, count)` at the position `index` /** Insert into the string.
Inserts elements from `string_view{t}.substr(index_str, count)` at the position `index`
The inserted string can contain null characters. The inserted string can contain null characters.
This function participates in overload resolution if This function participates in overload resolution if
@ -912,7 +967,9 @@ public:
return insert(n_, count, ch); return insert(n_, count, ch);
} }
/** Appends the contents of string view `sv` /** Append to the string.
Appends the contents of string view `sv`
The appended string can contain null characters. The appended string can contain null characters.
@ -926,7 +983,9 @@ public:
return append(sv.data(), sv.size()); return append(sv.data(), sv.size());
} }
/** Appends the contents of `sv.substr(pos, count)` /** Append to the string.
Appends the contents of `sv.substr(pos, count)`
The appended string can contain null characters. The appended string can contain null characters.
@ -943,7 +1002,9 @@ public:
return append(sv.substr(pos, count)); return append(sv.substr(pos, count));
} }
/** Appends characters in the range `(s, s + count)` /** Append to the string.
Appends characters in the range `(s, s + count)`
The appended string can contain null characters. The appended string can contain null characters.
@ -955,7 +1016,9 @@ public:
CharT const* s, CharT const* s,
size_type count); size_type count);
/** Appends the null-terminated character string pointed to by `s` /** Append to the string.
Appends the null-terminated character string pointed to by `s`
The length of the string is determined by the first The length of the string is determined by the first
null character using `Traits::length(s)`. null character using `Traits::length(s)`.
@ -970,32 +1033,36 @@ public:
return append(s, Traits::length(s)); return append(s, Traits::length(s));
} }
/** Appends characters from the range `(first, last)` /** Append to the string.
Appends characters from the range `(first, last)`
The inserted string can contain null characters. The inserted string can contain null characters.
This function does not participate in overload resolution if This function does not participate in overload resolution if
`InputIt` does not satisfy <em>LegacyInputIterator</em> `InputIterator` does not satisfy <em>LegacyInputIterator</em>
@throw std::length_error if `size() + std::distance(first, last) > max_size()` @throw std::length_error if `size() + std::distance(first, last) > max_size()`
@return `*this` @return `*this`
*/ */
template<typename InputIt> template<typename InputIterator>
#if GENERATING_DOCUMENTATION #if GENERATING_DOCUMENTATION
fixed_string& fixed_string&
#else #else
typename std::enable_if< typename std::enable_if<
detail::is_input_iterator<InputIt>::value, detail::is_input_iterator<InputIterator>::value,
fixed_string&>::type fixed_string&>::type
#endif #endif
append( append(
InputIt first, InputIterator first,
InputIt last) InputIterator last)
{ {
insert(end(), first, last); insert(end(), first, last);
return *this; return *this;
} }
/** Appends characters from initializer list `ilist` /** Append to the string.
Appends characters from initializer list `ilist`
The appended string can contain null characters. The appended string can contain null characters.
@ -1010,7 +1077,9 @@ public:
return *this; return *this;
} }
/** Appends characters from `string_view{t}` /** Append to the string.
Appends characters from `string_view{t}`
The appended string can contain null characters. The appended string can contain null characters.
This function participates in overload resolution if This function participates in overload resolution if
@ -1037,7 +1106,9 @@ public:
return append(string_view{t}); return append(string_view{t});
} }
/** Appends characters from `string_view{t}.substr{pos, count}` /** Append to the string.
Appends characters from `string_view{t}.substr{pos, count}`
The appended string can contain null characters. The appended string can contain null characters.
This function participates in overload resolution if This function participates in overload resolution if
@ -1067,6 +1138,10 @@ public:
return append(string_view{t}.substr(pos, count)); return append(string_view{t}.substr(pos, count));
} }
/** Append to the string.
@throw std::length_error if `size() + s.size() > max_size()`
*/
template<std::size_t M> template<std::size_t M>
fixed_string& fixed_string&
operator+=( operator+=(
@ -1075,7 +1150,9 @@ public:
return append(s.data(), s.size()); return append(s.data(), s.size());
} }
/** Appends the given character `ch` to the end of the string. /** Append to the string.
Appends the given character `ch` to the end of the string.
@throw std::length_error if `size() + 1 > max_size()` @throw std::length_error if `size() + 1 > max_size()`
*/ */
@ -1087,7 +1164,9 @@ public:
return *this; return *this;
} }
/** Appends the null-terminated character string pointed to by `s` /** Append to the string.
Appends the null-terminated character string pointed to by `s`
The length of the string is determined by the first The length of the string is determined by the first
null character using `Traits::length(s)`. null character using `Traits::length(s)`.
@ -1102,7 +1181,9 @@ public:
return append(s); return append(s);
} }
/** Appends characters from initializer list `ilist` /** Append to the string.
Appends characters from initializer list `ilist`
The appended string can contain null characters. The appended string can contain null characters.
@ -1116,7 +1197,9 @@ public:
return append(ilist); return append(ilist);
} }
/** Appends a copy of the characters from `string_view_type{t}` /** Append to the string.
Appends a copy of the characters from `string_view_type{t}`
The appended string can contain null characters. The appended string can contain null characters.
This function participates in overload resolution if This function participates in overload resolution if
@ -1140,7 +1223,7 @@ public:
return append(t); return append(t);
} }
/** Compare the string with another /** Compare the string with another.
Compares this string to `s`. Compares this string to `s`.
*/ */
@ -1153,7 +1236,7 @@ public:
s_, n_, &s.s_[0], s.n_); s_, n_, &s.s_[0], s.n_);
} }
/** Compare the string with another /** Compare the string with another.
Compares a `[pos1, pos1+count1)` substring of this string to `s`. If `count1 > size() - pos1` the substring is `[pos1, size())`. Compares a `[pos1, pos1+count1)` substring of this string to `s`. If `count1 > size() - pos1` the substring is `[pos1, size())`.
*/ */
@ -1168,7 +1251,7 @@ public:
substr(pos1, count1), s.data(), s.size()); substr(pos1, count1), s.data(), s.size());
} }
/** Compare the string with another /** Compare the string with another.
Compares a `[pos1, pos1+count1)` substring of this string to a substring `[pos2, pos2+count2)` of `s`. Compares a `[pos1, pos1+count1)` substring of this string to a substring `[pos2, pos2+count2)` of `s`.
If `count1 > size() - pos1` the first substring is `[pos1, size())`. Likewise, if `count2 > s.size() - pos2` the If `count1 > size() - pos1` the first substring is `[pos1, size())`. Likewise, if `count2 > s.size() - pos2` the
@ -1187,7 +1270,7 @@ public:
substr(pos1, count1), s.substr(pos2, count2)); substr(pos1, count1), s.substr(pos2, count2));
} }
/** Compare the string with another /** Compare the string with another.
Compares this string to the null-terminated character sequence beginning at the character pointed to by `s` with length `Traits::length(s)`. Compares this string to the null-terminated character sequence beginning at the character pointed to by `s` with length `Traits::length(s)`.
*/ */
@ -1199,7 +1282,7 @@ public:
s_, n_, s, Traits::length(s)); s_, n_, s, Traits::length(s));
} }
/** Compare the string with another /** Compare the string with another.
Compares a `[pos1, pos1+count1)` substring of this string to the null-terminated character sequence beginning at the character pointed to by `s` with Compares a `[pos1, pos1+count1)` substring of this string to the null-terminated character sequence beginning at the character pointed to by `s` with
length `Traits::length(s)`. If `count1 > size() - pos1` the substring is `[pos1, size())`. length `Traits::length(s)`. If `count1 > size() - pos1` the substring is `[pos1, size())`.
@ -1214,7 +1297,7 @@ public:
substr(pos1, count1), s, Traits::length(s)); substr(pos1, count1), s, Traits::length(s));
} }
/** Compare the string with another /** Compare the string with another.
Compares a `[pos1, pos1+count1)` substring of this string to the characters in the range `[s, s + count2)`. If `count1 > size() - pos1` the substring is `[pos1, size())`. Compares a `[pos1, pos1+count1)` substring of this string to the characters in the range `[s, s + count2)`. If `count1 > size() - pos1` the substring is `[pos1, size())`.
*/ */
@ -1229,7 +1312,7 @@ public:
substr(pos1, count1), s, count2); substr(pos1, count1), s, count2);
} }
/** Compare the string with another /** Compare the string with another.
Compares this string to `s`. Compares this string to `s`.
*/ */
@ -1241,7 +1324,7 @@ public:
s_, n_, s.data(), s.size()); s_, n_, s.data(), s.size());
} }
/** Compare the string with another /** Compare the string with another.
Compares a `[pos1, pos1+count1)` substring of this string to `s`. If `count1 > size() - pos1` the substring is `[pos1, size())`. Compares a `[pos1, pos1+count1)` substring of this string to `s`. If `count1 > size() - pos1` the substring is `[pos1, size())`.
*/ */
@ -1255,7 +1338,7 @@ public:
substr(pos1, count1), s); substr(pos1, count1), s);
} }
/** Compare the string with another /** Compare the string with another.
Replaces the part of the string indicated by `[pos1, pos1 + count1)` with a substring `[pos2, pos2 + count2)` of `t` after converting to `string_view_type`. Replaces the part of the string indicated by `[pos1, pos1 + count1)` with a substring `[pos2, pos2 + count2)` of `t` after converting to `string_view_type`.
@ -1283,7 +1366,9 @@ public:
string_view_type(t).substr(pos2, count2)); string_view_type(t).substr(pos2, count2));
} }
/** Returns a substring `(pos, pos + count)`. If the requested substring is greater than the size of the string, the returned substring is `[pos, size())`. /** Returns a substring.
Returns a substring `(pos, pos + count)`. If the requested substring is greater than the size of the string, the returned substring is `[pos, size())`.
@throw std::out_of_range if `pos > size()` @throw std::out_of_range if `pos > size()`
*/ */
@ -1292,7 +1377,10 @@ public:
size_type pos = 0, size_type pos = 0,
size_type count = npos) const; size_type count = npos) const;
/// Copy a substring `(pos, pos+count)` to character string pointed to by `dest`. /** Copy a substring.
Copy a substring `(pos, pos+count)` to character string pointed to by `dest`.
*/
size_type size_type
copy( copy(
CharT* dest, CharT* dest,
@ -1329,7 +1417,7 @@ public:
swap( swap(
fixed_string<M, CharT, Traits>& s); fixed_string<M, CharT, Traits>& s);
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with `s` Replaces the part of the string indicated by `[pos1, pos1 + n1)` with `s`
@ -1347,7 +1435,7 @@ public:
return replace(pos1, n1, str.data(), str.size()); return replace(pos1, n1, str.data(), str.size());
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with substring `[pos2, pos2 + n2)` of `str` Replaces the part of the string indicated by `[pos1, pos1 + n1)` with substring `[pos2, pos2 + n2)` of `str`
except that if `n2` is greater than `str.size()`, `[pos2, pos2 + str.size())` is used. except that if `n2` is greater than `str.size()`, `[pos2, pos2 + str.size())` is used.
@ -1367,7 +1455,7 @@ public:
return replace(pos1, n1, str.substr(pos2, n2)); return replace(pos1, n1, str.substr(pos2, n2));
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with `t` after converting to `string_view_type`. Replaces the part of the string indicated by `[pos1, pos1 + n1)` with `t` after converting to `string_view_type`.
@ -1397,7 +1485,7 @@ public:
return replace(pos1, n1, sv.data(), sv.size()); return replace(pos1, n1, sv.data(), sv.size());
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with substring `[pos2, pos2 + n2)` of `t` Replaces the part of the string indicated by `[pos1, pos1 + n1)` with substring `[pos2, pos2 + n2)` of `t`
after converting to `string_view_type`, except that if `n2` is greater than `t.size()`, `[pos2, pos2 + t.size())` is used. after converting to `string_view_type`, except that if `n2` is greater than `t.size()`, `[pos2, pos2 + t.size())` is used.
@ -1430,7 +1518,7 @@ public:
return replace(pos1, n1, sv.substr(pos2, n2)); return replace(pos1, n1, sv.substr(pos2, n2));
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with the characters in the range `[s, s + n2)`. Replaces the part of the string indicated by `[pos1, pos1 + n1)` with the characters in the range `[s, s + n2)`.
@ -1446,7 +1534,7 @@ public:
size_type n2); size_type n2);
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with the characters in the range `[s, s + Traits::length(s))`. Replaces the part of the string indicated by `[pos1, pos1 + n1)` with the characters in the range `[s, s + Traits::length(s))`.
@ -1463,7 +1551,7 @@ public:
return replace(pos, n1, s, Traits::length(s)); return replace(pos, n1, s, Traits::length(s));
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[pos1, pos1 + n1)` with `n2` copies of `c`. Replaces the part of the string indicated by `[pos1, pos1 + n1)` with `n2` copies of `c`.
@ -1478,7 +1566,7 @@ public:
size_type n2, size_type n2,
CharT c); CharT c);
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with `s` Replaces the part of the string indicated by `[i1, i2)` with `s`
@ -1495,7 +1583,7 @@ public:
return replace(i1, i2, str.data(), str.size()); return replace(i1, i2, str.data(), str.size());
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with `t` after converting to `string_view_type`. Replaces the part of the string indicated by `[i1, i2)` with `t` after converting to `string_view_type`.
@ -1525,7 +1613,7 @@ public:
return replace(i1 - begin(), i2 - i1, sv.data(), sv.size()); return replace(i1 - begin(), i2 - i1, sv.data(), sv.size());
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with the characters in the range `[s, s + n)`. Replaces the part of the string indicated by `[i1, i2)` with the characters in the range `[s, s + n)`.
@ -1543,7 +1631,7 @@ public:
return replace(i1 - begin(), i2 - i1, s, n); return replace(i1 - begin(), i2 - i1, s, n);
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with the characters in the range `[s, s + Traits::length(s))`. Replaces the part of the string indicated by `[i1, i2)` with the characters in the range `[s, s + Traits::length(s))`.
@ -1560,7 +1648,7 @@ public:
return replace(i1, i2, s, Traits::length(s)); return replace(i1, i2, s, Traits::length(s));
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with `n` copies of `c`. Replaces the part of the string indicated by `[i1, i2)` with `n` copies of `c`.
@ -1578,7 +1666,7 @@ public:
return replace(i1 - begin(), i2 - i1, n, c); return replace(i1 - begin(), i2 - i1, n, c);
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with the characters in the range `[j1, j2)`. Replaces the part of the string indicated by `[i1, i2)` with the characters in the range `[j1, j2)`.
@ -1603,7 +1691,7 @@ public:
return replace(i1, i2, fixed_string(j1, j2)); return replace(i1, i2, fixed_string(j1, j2));
} }
/** Replace a subset of the string /** Replace a subset of the string.
Replaces the part of the string indicated by `[i1, i2)` with the characters in the initializer list `il`. Replaces the part of the string indicated by `[i1, i2)` with the characters in the initializer list `il`.
@ -1626,7 +1714,9 @@ public:
// //
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
/** Finds the first substring equal to `t`. /** Finds the first substring.
Finds the first substring equal to `t`.
This function participates in overload resolution if This function participates in overload resolution if
`T` is convertible to `string_view` and `T` is not `T` is convertible to `string_view` and `T` is not
@ -1649,7 +1739,10 @@ public:
return find(sv.data(), pos, sv.size()); return find(sv.data(), pos, sv.size());
} }
/// Finds the first substring equal to `str`. /** Finds the first substring.
Finds the first substring equal to `str`.
*/
template<std::size_t M> template<std::size_t M>
size_type size_type
find( find(
@ -1659,14 +1752,19 @@ public:
return find(str.data(), pos, str.size()); return find(str.data(), pos, str.size());
} }
/// Finds the first substring equal to the range `(s, s + count)`. This range may contain null characters. /** Finds the first substring.
Finds the first substring equal to the range `(s, s + count)`. This range may contain null characters.
*/
size_type size_type
find( find(
const CharT* s, const CharT* s,
size_type pos, size_type pos,
size_type n) const; size_type n) const;
/** Finds the first substring equal to the character /** Finds the first substring.
Finds the first substring equal to the character
string pointed to by `s`. string pointed to by `s`.
The length of the string is determined by the first The length of the string is determined by the first
@ -1680,7 +1778,7 @@ public:
return find(s, pos, Traits::length(s)); return find(s, pos, Traits::length(s));
} }
/// Finds the first character `c` /// Finds the first character `c`.
size_type size_type
find( find(
CharT c, CharT c,
@ -1690,7 +1788,9 @@ public:
} }
/** Finds the last substring equal to `t`. /** Finds the last substring.
Finds the last substring equal to `t`.
This function participates in overload resolution if This function participates in overload resolution if
`T` is convertible to `string_view` and `T` is not `T` is convertible to `string_view` and `T` is not
@ -1713,7 +1813,10 @@ public:
return rfind(sv.data(), pos, sv.size()); return rfind(sv.data(), pos, sv.size());
} }
/// Finds the last substring equal to `str`. /** Finds the last substring.
Finds the last substring equal to `str`.
*/
template<std::size_t M> template<std::size_t M>
size_type size_type
rfind( rfind(
@ -1723,14 +1826,19 @@ public:
return rfind(str.data(), pos, str.size()); return rfind(str.data(), pos, str.size());
} }
/// Finds the last substring equal to the range `(s, s + count)`. This range may contain null characters. /** Finds the last substring.
Finds the last substring equal to the range `(s, s + count)`. This range may contain null characters.
*/
size_type size_type
rfind( rfind(
const CharT* s, const CharT* s,
size_type pos, size_type pos,
size_type n) const; size_type n) const;
/** Finds the last substring equal to the character /** Finds the last substring.
Finds the last substring equal to the character
string pointed to by `s`. string pointed to by `s`.
The length of the string is determined by the first The length of the string is determined by the first
@ -1744,7 +1852,7 @@ public:
return rfind(s, pos, Traits::length(s)); return rfind(s, pos, Traits::length(s));
} }
/// Finds the last character `c` /// Finds the last character `c`.
size_type size_type
rfind( rfind(
CharT c, CharT c,
@ -1753,7 +1861,9 @@ public:
return rfind(&c, pos, 1); return rfind(&c, pos, 1);
} }
/** Finds the first character equal to one of the characters in `t`. /** Finds the first character equal to any character in the string.
Finds the first character equal to one of the characters in `t`.
This function participates in overload resolution if This function participates in overload resolution if
`T` is convertible to `string_view` and `T` is not `T` is convertible to `string_view` and `T` is not
@ -1776,7 +1886,10 @@ public:
return find_first_of(sv.data(), pos, sv.size()); return find_first_of(sv.data(), pos, sv.size());
} }
/// Finds the first character equal to one of the characters in `str`. /** Finds the first character equal to any character in the string.
Finds the first character equal to one of the characters in `str`.
*/
template<std::size_t M> template<std::size_t M>
size_type size_type
find_first_of( find_first_of(
@ -1786,14 +1899,19 @@ public:
return find_first_of(str.data(), pos, str.size()); return find_first_of(str.data(), pos, str.size());
} }
/// Finds the first character equal to one of the characters in the range `(s, s + count)`. This range can include null characters. /** Finds the first character equal to any character in the string.
Finds the first character equal to one of the characters in the range `(s, s + count)`. This range can include null characters.
*/
size_type size_type
find_first_of( find_first_of(
const CharT* s, const CharT* s,
size_type pos, size_type pos,
size_type n) const; size_type n) const;
/** Finds the first character equal to one of the characters /** Finds the first character equal to any character in the string.
Finds the first character equal to one of the characters
in character string pointed to by `s`. in character string pointed to by `s`.
The length of the string is determined by the first The length of the string is determined by the first
@ -1816,7 +1934,9 @@ public:
return find_first_of(&c, pos, 1); return find_first_of(&c, pos, 1);
} }
/** Finds the last character equal to one of the characters in `t`. /** Finds the last character equal to any character in the string.
Finds the last character equal to one of the characters in `t`.
This function participates in overload resolution if This function participates in overload resolution if
`T` is convertible to `string_view` and `T` is not `T` is convertible to `string_view` and `T` is not
@ -1839,7 +1959,10 @@ public:
return find_last_of(sv.data(), pos, sv.size()); return find_last_of(sv.data(), pos, sv.size());
} }
/// Finds the last character equal to one of the characters in `str`. /** Finds the last character equal to any character in the string.
Finds the last character equal to one of the characters in `str`.
*/
template<std::size_t M> template<std::size_t M>
size_type size_type
find_last_of( find_last_of(
@ -1849,14 +1972,19 @@ public:
return find_last_of(str.data(), pos, str.size()); return find_last_of(str.data(), pos, str.size());
} }
/// Finds the last character equal to one of the characters in the range `(s, s + count)`. This range can include null characters. /** Finds the last character equal to any character in the string.
Finds the last character equal to one of the characters in the range `(s, s + count)`. This range can include null characters.
*/
size_type size_type
find_last_of( find_last_of(
const CharT* s, const CharT* s,
size_type pos, size_type pos,
size_type n) const; size_type n) const;
/** Finds the last character equal to one of the characters /** Finds the last character equal to any character in the string.
Finds the last character equal to one of the characters
in character string pointed to by `s`. in character string pointed to by `s`.
The length of the string is determined by the first The length of the string is determined by the first
@ -1879,7 +2007,9 @@ public:
return find_last_of(&c, pos, 1); return find_last_of(&c, pos, 1);
} }
/** Finds the first character equal to none of characters in `t`. /** Finds the first character equal to none the characters in the string.
Finds the first character equal to none of the characters in `t`.
This function participates in overload resolution if This function participates in overload resolution if
`T` is convertible to `string_view` and `T` is not `T` is convertible to `string_view` and `T` is not
@ -1902,7 +2032,10 @@ public:
return find_first_not_of(sv.data(), pos, sv.size()); return find_first_not_of(sv.data(), pos, sv.size());
} }
/// Finds the first character equal to none of the characters in `str`. /** Finds the first character equal to none the characters in the string.
Finds the first character equal to none of the characters in `str`.
*/
template<std::size_t M> template<std::size_t M>
size_type size_type
find_first_not_of( find_first_not_of(
@ -1912,14 +2045,19 @@ public:
return find_first_not_of(str.data(), pos, str.size()); return find_first_not_of(str.data(), pos, str.size());
} }
/// Finds the first character equal to none of characters in range `(s, s + count)`. This range can include null characters. /** Finds the first character equal to none the characters in the string.
Finds the first character equal to none of characters in range `(s, s + count)`. This range can include null characters.
*/
size_type size_type
find_first_not_of( find_first_not_of(
const CharT* s, const CharT* s,
size_type pos, size_type pos,
size_type n) const; size_type n) const;
/** Finds the first character equal to none of characters in /** Finds the first character equal to none the characters in the string.
Finds the first character equal to none of the characters in
character string pointed to by `s`. character string pointed to by `s`.
The length of the string is determined by the first The length of the string is determined by the first
@ -1942,7 +2080,9 @@ public:
return find_first_not_of(&c, pos, 1); return find_first_not_of(&c, pos, 1);
} }
/** Finds the last character equal to none of the characters in `t`. /** Finds the last character equal to none the characters in the string.
Finds the last character equal to none of the characters in `t`.
This function participates in overload resolution if This function participates in overload resolution if
`T` is convertible to `string_view` and `T` is not `T` is convertible to `string_view` and `T` is not
@ -1965,7 +2105,10 @@ public:
return find_last_not_of(sv.data(), pos, sv.size()); return find_last_not_of(sv.data(), pos, sv.size());
} }
/// Finds the last character equal to none of the characters in `str`. /** Finds the last character equal to none the characters in the string.
Finds the last character equal to none of the characters in `str`.
*/
template<size_t M> template<size_t M>
size_type size_type
find_last_not_of( find_last_not_of(
@ -1975,7 +2118,10 @@ public:
return find_last_not_of(str.data(), pos, str.size()); return find_last_not_of(str.data(), pos, str.size());
} }
/// Finds the last character equal to none of characters in range `(s, s + count)`. This range can include null characters. /** Finds the last character equal to none the characters in the string.
Finds the last character equal to none of the characters in range `(s, s + count)`. This range can include null characters.
*/
size_type size_type
find_last_not_of( find_last_not_of(
const CharT* s, const CharT* s,
@ -1983,7 +2129,9 @@ public:
size_type n) const; size_type n) const;
/** Finds the last character equal to none of characters in /** Finds the last character equal to none the characters in the string.
Finds the last character equal to none of the characters in
character string pointed to by `s`. character string pointed to by `s`.
The length of the string is determined by the first The length of the string is determined by the first

View File

@ -78,13 +78,13 @@ fixed_string(CharT const* s)
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
template<class InputIt> template<class InputIterator>
fixed_string<N, CharT, Traits>:: fixed_string<N, CharT, Traits>::
fixed_string( fixed_string(
InputIt first, InputIterator first,
InputIt last, InputIterator last,
typename std::enable_if< typename std::enable_if<
detail::is_input_iterator<InputIt>::value, detail::is_input_iterator<InputIterator>::value,
iterator>::type*) iterator>::type*)
{ {
assign(first, last); assign(first, last);
@ -205,14 +205,14 @@ assign(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
template<class InputIt> template<class InputIterator>
auto auto
fixed_string<N, CharT, Traits>:: fixed_string<N, CharT, Traits>::
assign( assign(
InputIt first, InputIterator first,
InputIt last) -> InputIterator last) ->
typename std::enable_if< typename std::enable_if<
detail::is_input_iterator<InputIt>::value, detail::is_input_iterator<InputIterator>::value,
fixed_string&>::type fixed_string&>::type
{ {
std::size_t const n = std::distance(first, last); std::size_t const n = std::distance(first, last);
@ -367,16 +367,16 @@ insert(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
template<class InputIt> template<class InputIterator>
auto auto
fixed_string<N, CharT, Traits>:: fixed_string<N, CharT, Traits>::
insert( insert(
const_iterator pos, const_iterator pos,
InputIt first, InputIterator first,
InputIt last) -> InputIterator last) ->
typename std::enable_if< typename std::enable_if<
detail::is_input_iterator< detail::is_input_iterator<
InputIt>::value, iterator>::type InputIterator>::value, iterator>::type
{ {
const size_type index = pos - begin(); const size_type index = pos - begin();
return insert(index, &*first, std::distance(first, last)).begin() + index; return insert(index, &*first, std::distance(first, last)).begin() + index;