You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							41 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							41 lines
						
					
					
						
							1.0 KiB
						
					
					
				
								#pragma once
							 | 
						|
								
							 | 
						|
								#include <iostream>
							 | 
						|
								#include <ostream>
							 | 
						|
								#include <sstream>
							 | 
						|
								#ifndef _MSC_VER
							 | 
						|
								#include <boost/locale.hpp>
							 | 
						|
								#else
							 | 
						|
								#include <boost/scoped_array.hpp>
							 | 
						|
								#include "windows.h"
							 | 
						|
								#include "winnls.h" // unicode-multibyte conversion
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								inline std::string wide2utf8(const std::wstring& text) {
							 | 
						|
								#ifndef _MSC_VER
							 | 
						|
									return boost::locale::conv::to_utf<wchar_t>(text, "UTF-8");
							 | 
						|
								#else
							 | 
						|
									const size_t len_needed = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), (UINT)(text.length()) , NULL, 0, NULL, NULL) ;
							 | 
						|
									boost::scoped_array<char> buff(new char[len_needed+1]) ;
							 | 
						|
									const size_t num_copied = ::WideCharToMultiByte(CP_UTF8, 0, text.c_str(), (UINT)(text.length()) , buff.get(), len_needed+1, NULL, NULL) ;
							 | 
						|
									return std::string(buff.get(), num_copied) ;
							 | 
						|
								#endif
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								namespace std {
							 | 
						|
								
							 | 
						|
									inline ostream& operator<<(ostream& out, const wchar_t* value)
							 | 
						|
									{
							 | 
						|
										wstring text(value) ;
							 | 
						|
										out << wide2utf8(text);
							 | 
						|
										return out;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									inline ostream& operator<<(ostream& out, const wstring& value)
							 | 
						|
									{
							 | 
						|
										out << wide2utf8(value);
							 | 
						|
										return out;
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								
							 |