Date
2018-03-18.16:03:30
Message id
9756

Content

Proposed resolution:

This wording is relative to N4727.

  1. Edit [basic.string], class template basic_string synopsis, as indicated:

    […]
    
    template<class InputIterator,
             class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
      basic_string(InputIterator, InputIterator, Allocator = Allocator())
        -> basic_string<typename iterator_traits<InputIterator>::value_type,
                        char_traits<typename iterator_traits<InputIterator>::value_type>,
                         Allocator>;
    
    template<class charT,
             class traits,
             class Allocator = allocator<charT>>
      explicit basic_string(basic_string_view<charT, traits>, const Allocator& = Allocator())
        -> basic_string<charT, traits, Allocator>;
    
    template<class charT,
             class traits,
             class Allocator = allocator<charT>>
      basic_string(basic_string_view<charT, traits>, typename see below::size_type, typename see below::size_type, 
                   const Allocator& = Allocator())
        -> basic_string<charT, traits, Allocator>;
    
    }                     
    

    -?- A size_type parameter type in a basic_string deduction guide refers to the size_type member type of the type deduced by the deduction guide.

  2. Edit [string.cons] as indicated:

    template<class InputIterator,
             class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
      basic_string(InputIterator, InputIterator, Allocator = Allocator())
        -> basic_string<typename iterator_traits<InputIterator>::value_type,
                        char_traits<typename iterator_traits<InputIterator>::value_type>,
                         Allocator>;
    

    -25- Remarks: Shall not participate in overload resolution if InputIterator is a type that does not qualify as an input iterator, or if Allocator is a type that does not qualify as an allocator ([container.requirements.general]).

    template<class charT,
             class traits,
             class Allocator = allocator<charT>>
      explicit basic_string(basic_string_view<charT, traits>, const Allocator& = Allocator())
        -> basic_string<charT, traits, Allocator>;
    
    template<class charT,
             class traits,
             class Allocator = allocator<charT>>
      basic_string(basic_string_view<charT, traits>, typename see below::size_type, typename see below::size_type, 
                   const Allocator& = Allocator())
        -> basic_string<charT, traits, Allocator>;                                          
    

    -?- Remarks: Shall not participate in overload resolution if Allocator is a type that does not qualify as an allocator ([container.requirements.general]).