Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 08:53:59

0001 //
0002 // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
0003 // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
0004 //
0005 // Distributed under the Boost Software License, Version 1.0. (See accompanying
0006 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0007 //
0008 // Official repository: https://github.com/boostorg/url
0009 //
0010 
0011 #ifndef BOOST_URL_PARAMS_ENCODED_REF_HPP
0012 #define BOOST_URL_PARAMS_ENCODED_REF_HPP
0013 
0014 #include <boost/url/detail/config.hpp>
0015 #include <boost/url/ignore_case.hpp>
0016 #include <boost/url/params_encoded_view.hpp>
0017 #include <initializer_list>
0018 
0019 namespace boost {
0020 namespace urls {
0021 
0022 #ifndef BOOST_URL_DOCS
0023 class url_base;
0024 class params_encoded_view;
0025 #endif
0026 
0027 /** A view representing query parameters in a URL
0028 
0029     Objects of this type are used to interpret
0030     the query parameters as a bidirectional view
0031     of key value pairs.
0032 
0033     The view does not retain ownership of the
0034     elements and instead references the original
0035     url. The caller is responsible for ensuring
0036     that the lifetime of the referenced url
0037     extends until it is no longer referenced.
0038 
0039     The view is modifiable; calling non-const
0040     members causes changes to the referenced
0041     url.
0042 
0043     @par Example
0044     @code
0045     url u( "?first=John&last=Doe" );
0046 
0047     params_encoded_ref p = u.encoded_params();
0048     @endcode
0049 
0050     Strings produced when elements are returned
0051     have type @ref param_pct_view and represent
0052     encoded strings. Strings passed to member
0053     functions may contain percent escapes, and
0054     throw exceptions on invalid inputs.
0055 
0056     @par Iterator Invalidation
0057     Changes to the underlying character buffer
0058     can invalidate iterators which reference it.
0059     Modifications made through the container
0060     invalidate some iterators to the underlying
0061     character buffer:
0062     @li @ref append : Only `end()`.
0063     @li @ref assign, @ref clear,
0064         `operator=` : All params.
0065     @li @ref erase : Erased params and all
0066         params after (including `end()`).
0067     @li @ref insert : All params at or after
0068         the insertion point (including `end()`).
0069     @li @ref replace, @ref set : Modified
0070         params and all params
0071         after (including `end()`).
0072 */
0073 class BOOST_URL_DECL params_encoded_ref
0074     : public params_encoded_base
0075 {
0076     friend class url_base;
0077 
0078     url_base* u_ = nullptr;
0079 
0080     params_encoded_ref(
0081         url_base& u) noexcept;
0082 
0083 public:
0084     //--------------------------------------------
0085     //
0086     // Special Members
0087     //
0088     //--------------------------------------------
0089 
0090     /** Constructor
0091 
0092         After construction, both views
0093         reference the same url. Ownership is not
0094         transferred; the caller is responsible
0095         for ensuring the lifetime of the url
0096         extends until it is no longer
0097         referenced.
0098 
0099         @par Postconditions
0100         @code
0101         &this->url() == &other.url();
0102         @endcode
0103 
0104         @par Complexity
0105         Constant.
0106 
0107         @par Exception Safety
0108         Throws nothing.
0109 
0110         @param other The other view.
0111     */
0112     params_encoded_ref(
0113         params_encoded_ref const& other) = default;
0114 
0115     /** Assignment
0116 
0117         The previous contents of this are
0118         replaced by the contents of `other.
0119 
0120         <br>
0121         All iterators are invalidated.
0122 
0123         @note
0124         The strings referenced by `other`
0125         must not come from the underlying url,
0126         or else the behavior is undefined.
0127 
0128         @par Effects
0129         @code
0130         this->assign( other.begin(), other.end() );
0131         @endcode
0132 
0133         @par Complexity
0134         Linear in `other.buffer().size()`.
0135 
0136         @par Exception Safety
0137         Strong guarantee.
0138         Calls to allocate may throw.
0139 
0140         @param other The params to assign.
0141         @return `*this`
0142     */
0143     params_encoded_ref&
0144     operator=(
0145         params_encoded_ref const& other);
0146 
0147     /** Assignment
0148 
0149         After assignment, the previous contents
0150         of the query parameters are replaced by
0151         the contents of the initializer-list.
0152 
0153         <br>
0154         All iterators are invalidated.
0155 
0156         @par Preconditions
0157         None of character buffers referenced by
0158         `init` may overlap the character buffer of
0159         the underlying url, or else the behavior
0160         is undefined.
0161 
0162         @par Effects
0163         @code
0164         this->assign( init.begin(), init.end() );
0165         @endcode
0166 
0167         @par Complexity
0168         Linear in `init.size()`.
0169 
0170         @par Exception Safety
0171         Strong guarantee.
0172         Calls to allocate may throw.
0173         Exceptions thrown on invalid input.
0174 
0175         @throw system_error
0176         `init` contains an invalid percent-encoding.
0177 
0178         @param init The list of params to assign.
0179         @return `*this`
0180     */
0181     params_encoded_ref&
0182     operator=(std::initializer_list<
0183         param_pct_view> init);
0184 
0185     /** Conversion
0186 
0187         @par Complexity
0188         Constant.
0189 
0190         @par Exception Safety
0191         Throws nothing.
0192 
0193         @return A view of the params.
0194     */
0195     operator
0196     params_encoded_view() const noexcept;
0197 
0198     //--------------------------------------------
0199     //
0200     // Observers
0201     //
0202     //--------------------------------------------
0203 
0204     /** Return the referenced url
0205 
0206         This function returns the url referenced
0207         by the view.
0208 
0209         @par Example
0210         @code
0211         url u( "?key=value" );
0212 
0213         assert( &u.encoded_params().url() == &u );
0214         @endcode
0215 
0216         @par Exception Safety
0217         @code
0218         Throws nothing.
0219         @endcode
0220 
0221         @return A reference to the url.
0222     */
0223     url_base&
0224     url() const noexcept
0225     {
0226         return *u_;
0227     }
0228 
0229     //--------------------------------------------
0230     //
0231     // Modifiers
0232     //
0233     //--------------------------------------------
0234 
0235     /** Clear the contents of the container
0236 
0237         <br>
0238         All iterators are invalidated.
0239 
0240         @par Effects
0241         @code
0242         this->url().remove_query();
0243         @endcode
0244 
0245         @par Postconditions
0246         @code
0247         this->empty() == true && this->url().has_query() == false
0248         @endcode
0249 
0250         @par Complexity
0251         Constant.
0252 
0253         @par Exception Safety
0254         Throws nothing.
0255     */
0256     void
0257     clear() noexcept;
0258 
0259     //--------------------------------------------
0260 
0261     /** Assign params
0262 
0263         This function replaces the entire
0264         contents of the view with the params
0265         in the <em>initializer-list</em>.
0266 
0267         <br>
0268         All iterators are invalidated.
0269 
0270         @note
0271         The strings referenced by the inputs
0272         must not come from the underlying url,
0273         or else the behavior is undefined.
0274 
0275         @par Example
0276         @code
0277         url u;
0278 
0279         u.encoded_params().assign({ { "first", "John" }, { "last", "Doe" } });
0280         @endcode
0281 
0282         @par Complexity
0283         Linear in `init.size()`.
0284 
0285         @par Exception Safety
0286         Strong guarantee.
0287         Calls to allocate may throw.
0288         Exceptions thrown on invalid input.
0289 
0290         @throw system_error
0291         `init` contains an invalid percent-encoding.
0292 
0293         @param init The list of params to assign.
0294     */
0295     void
0296     assign(
0297         std::initializer_list<
0298             param_pct_view> init);
0299 
0300     /** Assign params
0301 
0302         This function replaces the entire
0303         contents of the view with the params
0304         in the range.
0305 
0306         <br>
0307         All iterators are invalidated.
0308 
0309         @note
0310         The strings referenced by the inputs
0311         must not come from the underlying url,
0312         or else the behavior is undefined.
0313 
0314         @par Mandates
0315         @code
0316         std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
0317         @endcode
0318 
0319         @par Complexity
0320         Linear in the size of the range.
0321 
0322         @par Exception Safety
0323         Strong guarantee.
0324         Calls to allocate may throw.
0325         Exceptions thrown on invalid input.
0326 
0327         @throw system_error
0328         The range contains an invalid percent-encoding.
0329 
0330         @param first The first element to assign.
0331         @param last One past the last element to assign.
0332     */
0333     template<class FwdIt>
0334     void
0335     assign(FwdIt first, FwdIt last);
0336 
0337     //--------------------------------------------
0338 
0339     /** Append params
0340 
0341         This function appends a param to the view.
0342 
0343         <br>
0344         The `end()` iterator is invalidated.
0345 
0346         @par Example
0347         @code
0348         url u;
0349 
0350         u.encoded_params().append( { "first", "John" } );
0351         @endcode
0352 
0353         @par Complexity
0354         Linear in `this->url().encoded_query().size()`.
0355 
0356         @par Exception Safety
0357         Strong guarantee.
0358         Calls to allocate may throw.
0359         Exceptions thrown on invalid input.
0360 
0361         @throw system_error
0362         `p` contains an invalid percent-encoding.
0363 
0364         @return An iterator to the new element.
0365 
0366         @param p The param to append.
0367     */
0368     iterator
0369     append(
0370         param_pct_view const& p);
0371 
0372     /** Append params
0373 
0374         This function appends the params in
0375         an <em>initializer-list</em> to the view.
0376 
0377         <br>
0378         The `end()` iterator is invalidated.
0379 
0380         @par Example
0381         @code
0382         url u;
0383 
0384         u.encoded_params().append({ {"first", "John"}, {"last", "Doe"} });
0385         @endcode
0386 
0387         @par Complexity
0388         Linear in `this->url().encoded_query().size()`.
0389 
0390         @par Exception Safety
0391         Strong guarantee.
0392         Calls to allocate may throw.
0393         Exceptions thrown on invalid input.
0394 
0395         @throw system_error
0396         `init` contains an invalid percent-encoding.
0397 
0398         @return An iterator to the first new element.
0399 
0400         @param init The list of params to append.
0401     */
0402     iterator
0403     append(
0404         std::initializer_list<
0405             param_pct_view> init);
0406 
0407     /** Append params
0408 
0409         This function appends a range of params
0410         to the view.
0411 
0412         <br>
0413         The `end()` iterator is invalidated.
0414 
0415         @note
0416         The strings referenced by the inputs
0417         must not come from the underlying url,
0418         or else the behavior is undefined.
0419 
0420         @par Mandates
0421         @code
0422         std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
0423         @endcode
0424 
0425         @par Complexity
0426         Linear in `this->url().encoded_query().size()`.
0427 
0428         @par Exception Safety
0429         Strong guarantee.
0430         Calls to allocate may throw.
0431         Exceptions thrown on invalid input.
0432 
0433         @throw system_error
0434         The range contains an invalid percent-encoding.
0435 
0436         @return An iterator to the first new element.
0437 
0438         @param first The first element to append.
0439         @param last One past the last element to append.
0440         @return An iterator to the first new element.
0441     */
0442     template<class FwdIt>
0443     iterator
0444     append(
0445         FwdIt first, FwdIt last);
0446 
0447     //--------------------------------------------
0448 
0449     /** Insert params
0450 
0451         This function inserts a param
0452         before the specified position.
0453 
0454         <br>
0455         All iterators that are equal to
0456         `before` or come after are invalidated.
0457 
0458         @par Complexity
0459         Linear in `this->url().encoded_query().size()`.
0460 
0461         @par Exception Safety
0462         Strong guarantee.
0463         Calls to allocate may throw.
0464         Exceptions thrown on invalid input.
0465 
0466         @throw system_error
0467         `p` contains an invalid percent-encoding.
0468 
0469         @return An iterator to the inserted
0470         element.
0471 
0472         @param before An iterator before which
0473         the param is inserted. This may
0474         be equal to `end()`.
0475 
0476         @param p The param to insert.
0477     */
0478     iterator
0479     insert(
0480         iterator before,
0481         param_pct_view const& p);
0482 
0483     /** Insert params
0484 
0485         This function inserts the params in
0486         an <em>initializer-list</em> before
0487         the specified position.
0488 
0489         <br>
0490         All iterators that are equal to
0491         `before` or come after are invalidated.
0492 
0493         @note
0494         The strings referenced by the inputs
0495         must not come from the underlying url,
0496         or else the behavior is undefined.
0497 
0498         @par Complexity
0499         Linear in `this->url().encoded_query().size()`.
0500 
0501         @par Exception Safety
0502         Strong guarantee.
0503         Calls to allocate may throw.
0504         Exceptions thrown on invalid input.
0505 
0506         @throw system_error
0507         `init` contains an invalid percent-encoding.
0508 
0509         @return An iterator to the first
0510         element inserted, or `before` if
0511         `init.size() == 0`.
0512 
0513         @param before An iterator before which
0514         the element is inserted. This may
0515         be equal to `end()`.
0516 
0517         @param init The list of params to insert.
0518     */
0519     iterator
0520     insert(
0521         iterator before,
0522         std::initializer_list<
0523             param_pct_view> init);
0524 
0525     /** Insert params
0526 
0527         This function inserts a range of
0528         params before the specified position.
0529 
0530         <br>
0531         All iterators that are equal to
0532         `before` or come after are invalidated.
0533 
0534         @note
0535         The strings referenced by the inputs
0536         must not come from the underlying url,
0537         or else the behavior is undefined.
0538 
0539         @par Mandates
0540         @code
0541         std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
0542         @endcode
0543 
0544         @par Complexity
0545         Linear in `this->url().encoded_query().size()`.
0546 
0547         @par Exception Safety
0548         Strong guarantee.
0549         Calls to allocate may throw.
0550         Exceptions thrown on invalid input.
0551 
0552         @throw system_error
0553         The range contains an invalid percent-encoding.
0554 
0555         @return An iterator to the first
0556         element inserted, or `before` if
0557         `first == last`.
0558 
0559         @param before An iterator before which
0560         the element is inserted. This may
0561         be equal to `end()`.
0562 
0563         @param first The first element to insert.
0564         @param last One past the last element to insert.
0565         @return An iterator to the first element inserted.
0566     */
0567     template<class FwdIt>
0568     iterator
0569     insert(
0570         iterator before,
0571         FwdIt first,
0572         FwdIt last);
0573 
0574     //--------------------------------------------
0575 
0576     /** Erase params
0577 
0578         This function removes an element from
0579         the container.
0580 
0581         <br>
0582         All iterators that are equal to
0583         `pos` or come after are invalidated.
0584 
0585         @par Example
0586         @code
0587         url u( "?first=John&last=Doe" );
0588 
0589         params_encoded_ref::iterator it = u.encoded_params().erase( u.encoded_params().begin() );
0590 
0591         assert( u.encoded_query() == "last=Doe" );
0592         @endcode
0593 
0594         @par Complexity
0595         Linear in `this->url().encoded_query().size()`.
0596 
0597         @par Exception Safety
0598         Throws nothing.
0599 
0600         @return An iterator to one past
0601         the removed element.
0602 
0603         @param pos An iterator to the element.
0604     */
0605     iterator
0606     erase(iterator pos) noexcept;
0607 
0608     /** Erase params
0609 
0610         This function removes a range of params
0611         from the container.
0612 
0613         <br>
0614         All iterators that are equal to
0615         `first` or come after are invalidated.
0616 
0617         @par Complexity
0618         Linear in `this->url().encoded_query().size()`.
0619 
0620         @par Exception Safety
0621         Throws nothing.
0622 
0623         @return An iterator to one past
0624         the removed range.
0625 
0626         @param first The first element to remove.
0627         @param last One past the last element to remove.
0628         @return An iterator to one past the removed range.
0629     */
0630     iterator
0631     erase(
0632         iterator first,
0633         iterator last) noexcept;
0634 
0635     /** Erase params
0636 
0637         <br>
0638         All iterators are invalidated.
0639 
0640         @par Postconditions
0641         @code
0642         this->count( key, ic ) == 0
0643         @endcode
0644 
0645         @par Complexity
0646         Linear in `this->url().encoded_query().size()`.
0647 
0648         @par Exception Safety
0649         Exceptions thrown on invalid input.
0650 
0651         @throw system_error
0652         `key` contains an invalid percent-encoding.
0653 
0654         @return The number of params removed
0655         from the container.
0656 
0657         @param key The key to match.
0658         By default, a case-sensitive
0659         comparison is used.
0660 
0661         @param ic An optional parameter. If
0662         the value @ref ignore_case is passed
0663         here, the comparison is
0664         case-insensitive.
0665     */
0666     std::size_t
0667     erase(
0668         pct_string_view key,
0669         ignore_case_param ic = {}) noexcept;
0670 
0671     //--------------------------------------------
0672 
0673     /** Replace params
0674 
0675         This function replaces the contents
0676         of the element at `pos` with the
0677         specified param.
0678 
0679         <br>
0680         All iterators that are equal to
0681         `pos` or come after are invalidated.
0682 
0683         @note
0684         The strings passed in must not come
0685         from the element being replaced,
0686         or else the behavior is undefined.
0687 
0688         @par Example
0689         @code
0690         url u( "?first=John&last=Doe" );
0691 
0692         u.encoded_params().replace( u.encoded_params().begin(), { "title", "Mr" });
0693 
0694         assert( u.encoded_query() == "title=Mr&last=Doe" );
0695         @endcode
0696 
0697         @par Complexity
0698         Linear in `this->url().encoded_query().size()`.
0699 
0700         @par Exception Safety
0701         Strong guarantee.
0702         Calls to allocate may throw.
0703         Exceptions thrown on invalid input.
0704 
0705         @throw system_error
0706         `p` contains an invalid percent-encoding.
0707 
0708         @return An iterator to the element.
0709 
0710         @param pos An iterator to the element.
0711 
0712         @param p The param to assign.
0713     */
0714     iterator
0715     replace(
0716         iterator pos,
0717         param_pct_view const& p);
0718 
0719     /** Replace params
0720 
0721         This function replaces a range of
0722         params with the params in an
0723         <em>initializer-list</em>.
0724 
0725         <br>
0726         All iterators that are equal to
0727         `from` or come after are invalidated.
0728 
0729         @note
0730         The strings referenced by the inputs
0731         must not come from the underlying url,
0732         or else the behavior is undefined.
0733 
0734         @par Complexity
0735         Linear in `this->url().encoded_query().size()`.
0736 
0737         @par Exception Safety
0738         Strong guarantee.
0739         Calls to allocate may throw.
0740         Exceptions thrown on invalid input.
0741 
0742         @throw system_error
0743         `init` contains an invalid percent-encoding.
0744 
0745         @return An iterator to the first
0746         element inserted, or one past `to` if
0747         `init.size() == 0`.
0748 
0749         @param from,to The range of params
0750         to replace.
0751 
0752         @param init The list of params to assign.
0753     */
0754     iterator
0755     replace(
0756         iterator from,
0757         iterator to,
0758         std::initializer_list<
0759             param_pct_view> init);
0760 
0761     /** Replace params
0762 
0763         This function replaces a range of
0764         params with a range of params.
0765 
0766         <br>
0767         All iterators that are equal to
0768         `from` or come after are invalidated.
0769 
0770         @note
0771         The strings referenced by the inputs
0772         must not come from the underlying url,
0773         or else the behavior is undefined.
0774 
0775         @par Mandates
0776         @code
0777         std::is_convertible< std::iterator_traits< FwdIt >::reference_type, param_pct_view >::value == true
0778         @endcode
0779 
0780         @par Complexity
0781         Linear in `this->url().encoded_query().size()`.
0782 
0783         @par Exception Safety
0784         Strong guarantee.
0785         Calls to allocate may throw.
0786         Exceptions thrown on invalid input.
0787 
0788         @throw system_error
0789         The range contains an invalid percent-encoding.
0790 
0791         @return An iterator to the first
0792         element inserted, or one past `to` if
0793         `first == last`.
0794 
0795         @param from The first element to replace.
0796         @param to One past the last element to replace.
0797         @param first The first element to insert.
0798         @param last One past the last element to insert.
0799         @return An iterator to the first element inserted, or
0800         one past `to` if `first == last`.
0801     */
0802     template<class FwdIt>
0803     iterator
0804     replace(
0805         iterator from,
0806         iterator to,
0807         FwdIt first,
0808         FwdIt last);
0809 
0810     //--------------------------------------------
0811 
0812     /** Remove the value on an element
0813 
0814         This function removes the value of
0815         an element at the specified position.
0816         After the call returns, `has_value`
0817         for the element is false.
0818 
0819         <br>
0820         All iterators that are equal to
0821         `pos` or come after are invalidated.
0822 
0823         @par Example
0824         @code
0825         url u( "?first=John&last=Doe" );
0826 
0827         u.encoded_params().unset( u.encoded_params().begin() );
0828 
0829         assert( u.encoded_query() == "first&last=Doe" );
0830         @endcode
0831 
0832         @par Complexity
0833         Linear in `this->url().encoded_query().size()`.
0834 
0835         @par Exception Safety
0836         Throws nothing.
0837 
0838         @return An iterator to the element.
0839 
0840         @param pos An iterator to the element.
0841     */
0842     iterator
0843     unset(
0844         iterator pos) noexcept;
0845 
0846     /** Set a value
0847 
0848         This function replaces the value of an
0849         element at the specified position.
0850 
0851         <br>
0852         All iterators that are equal to
0853         `pos` or come after are invalidated.
0854 
0855         @note
0856         The string passed in must not come
0857         from the element being replaced,
0858         or else the behavior is undefined.
0859 
0860         @par Example
0861         @code
0862         url u( "?id=42&id=69" );
0863 
0864         u.encoded_params().set( u.encoded_params().begin(), "none" );
0865 
0866         assert( u.encoded_query() == "id=none&id=69" );
0867         @endcode
0868 
0869         @par Complexity
0870         Linear in `this->url().encoded_query().size()`.
0871 
0872         @par Exception Safety
0873         Strong guarantee.
0874         Calls to allocate may throw.
0875         Exceptions thrown on invalid input.
0876 
0877         @throw system_error
0878         `value` contains an invalid percent-encoding.
0879 
0880         @return An iterator to the element.
0881 
0882         @param pos An iterator to the element.
0883 
0884         @param value The value to assign. The
0885         empty string still counts as a value.
0886         That is, `has_value` for the element
0887         is true.
0888     */
0889     iterator
0890     set(
0891         iterator pos,
0892         pct_string_view value);
0893 
0894     /** Set a value
0895 
0896         This function performs one of two
0897         actions depending on the value of
0898         `this->contains( key, ic )`.
0899 
0900         @li If key is contained in the view
0901         then one of the matching params has
0902         its value changed to the specified value.
0903         The remaining params with a matching
0904         key are erased. Otherwise,
0905 
0906         @li If `key` is not contained in the
0907         view, then the function apppends the
0908         param `{ key, value }`.
0909 
0910         <br>
0911         All iterators are invalidated.
0912 
0913         @note
0914         The strings passed in must not come
0915         from the element being replaced,
0916         or else the behavior is undefined.
0917 
0918         @par Example
0919         @code
0920         url u( "?id=42&id=69" );
0921 
0922         u.encoded_params().set( "id", "none" );
0923 
0924         assert( u.encoded_params().count( "id" ) == 1 );
0925         @endcode
0926 
0927         @par Postconditions
0928         @code
0929         this->count( key, ic ) == 1 && this->find( key, ic )->value == value
0930         @endcode
0931 
0932         @par Complexity
0933         Linear in `this->url().encoded_query().size()`.
0934 
0935         @par Exception Safety
0936         Strong guarantee.
0937         Calls to allocate may throw.
0938         Exceptions thrown on invalid input.
0939 
0940         @throw system_error
0941         `key` or `value` contain an invalid
0942         percent-encoding.
0943 
0944         @return An iterator to the appended
0945         or modified element.
0946 
0947         @param key The key to match.
0948         By default, a case-sensitive
0949         comparison is used.
0950 
0951         @param value The value to assign. The
0952         empty string still counts as a value.
0953         That is, `has_value` for the element
0954         is true.
0955 
0956         @param ic An optional parameter. If
0957         the value @ref ignore_case is passed
0958         here, the comparison is
0959         case-insensitive.
0960     */
0961     iterator
0962     set(
0963         pct_string_view key,
0964         pct_string_view value,
0965         ignore_case_param ic = {});
0966 
0967 private:
0968     template<class FwdIt>
0969     void
0970     assign(FwdIt first, FwdIt last,
0971         std::forward_iterator_tag);
0972 
0973     // Doxygen cannot render ` = delete`
0974     template<class FwdIt>
0975     void
0976     assign(FwdIt first, FwdIt last,
0977            std::input_iterator_tag) = delete;
0978 
0979     template<class FwdIt>
0980     iterator
0981     insert(
0982         iterator before,
0983         FwdIt first,
0984         FwdIt last,
0985         std::forward_iterator_tag);
0986 
0987     // Doxygen cannot render ` = delete`
0988     template<class FwdIt>
0989     iterator
0990     insert(
0991         iterator before,
0992         FwdIt first,
0993         FwdIt last,
0994         std::input_iterator_tag) = delete;
0995 };
0996 
0997 } // urls
0998 } // boost
0999 
1000 // This is in <boost/url/url_base.hpp>
1001 //
1002 // #include <boost/url/impl/params_encoded_ref.hpp>
1003 
1004 #endif