std::codecvt<InternT,ExternT,StateT>::unshift, do_unshift
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header  <locale>
  | 
||
|   public: result unshift( StateT& state, ExternT* to, ExternT* to_end,  | 
(1) | |
|   protected: virtual result do_unshift( StateT& state, ExternT* to, ExternT* to_end,  | 
(2) | |
1) Public member function, calls the member function 
do_unshift of the most derived class.2) If the encoding represented by this 
codecvt facet is state-dependent, and state represents a conversion state that is not the initial shift state, writes the characters necessary to return to the initial shift state. The characters are written to a character array whose first element is pointed to by to. No more than to_end - to characters are written. The parameter to_next is updated to point one past the last character written.Return value
A value of type std::codecvt_base::result, indicating the success status as follows:
 ok
 | 
all necessary characters were written. state now represents initial shift state | 
 partial
 | 
not enough space in the output buffer. to_next == to_end | 
 error
 | 
an unspecified error has occurred | 
 noconv
 | 
the encoding is not state-dependent, no termination sequence necessary | 
Notes
This function is called by std::basic_filebuf::close() and in other situations when finalizing a state-dependent multibyte character sequence.
Example
| This section is incomplete Reason: no example  | 
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior | 
|---|---|---|---|
| LWG 305 | C++98 | std::codecvt<wchar_t, char, std::mbstate_t>::do_unshift was required not to write any character  | 
not required | 
| LWG 380 | C++98 | the meaning of returning partial was 'more characters need to be supplied to complete termination', but no character is supplied  | 
corrected to indicating insufficient buffer space  | 
| LWG 381 | C++98 | state was not required to be valid, and error is returned if state is invalid  | 
state is required to be valid, and returning error indicates an error  | 
| LWG 664 | C++98 | std::codecvt<char, char, std::mbstate_t>::do_unshift was required not to write any character  | 
not required | 
| LWG 665 | C++98 | std::codecvt<char, char, std::mbstate_t>::do_unshift was required to return noconv  | 
not required | 
See also
|   converts a wide character to its multibyte representation, given state  (function)  | |
|    [virtual]  | 
  converts a string from InternT to ExternT, such as when writing to file (virtual protected member function)  |