mirror of https://github.com/procxx/kepka.git
				
				
				
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			912 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			912 B
		
	
	
	
		
			C++
		
	
	
	
| #ifndef MAPBOX_UTIL_VARIANT_IO_HPP
 | |
| #define MAPBOX_UTIL_VARIANT_IO_HPP
 | |
| 
 | |
| #include <iosfwd>
 | |
| 
 | |
| #include <mapbox/variant.hpp>
 | |
| 
 | |
| namespace mapbox {
 | |
| namespace util {
 | |
| 
 | |
| namespace detail {
 | |
| // operator<< helper
 | |
| template <typename Out>
 | |
| class printer
 | |
| {
 | |
| public:
 | |
|     explicit printer(Out& out)
 | |
|         : out_(out) {}
 | |
|     printer& operator=(printer const&) = delete;
 | |
| 
 | |
|     // visitor
 | |
|     template <typename T>
 | |
|     void operator()(T const& operand) const
 | |
|     {
 | |
|         out_ << operand;
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     Out& out_;
 | |
| };
 | |
| }
 | |
| 
 | |
| // operator<<
 | |
| template <typename CharT, typename Traits, typename... Types>
 | |
| VARIANT_INLINE std::basic_ostream<CharT, Traits>&
 | |
| operator<<(std::basic_ostream<CharT, Traits>& out, variant<Types...> const& rhs)
 | |
| {
 | |
|     detail::printer<std::basic_ostream<CharT, Traits>> visitor(out);
 | |
|     apply_visitor(visitor, rhs);
 | |
|     return out;
 | |
| }
 | |
| } // namespace util
 | |
| } // namespace mapbox
 | |
| 
 | |
| #endif // MAPBOX_UTIL_VARIANT_IO_HPP
 |