str.hpp
be00138c
 #ifndef STR_HPP
 #define STR_HPP
 
 
 #include <sstream>
 
 
 #define STR(VALUES) \
     ((std::ostringstream &)(std::ostringstream() << VALUES)).str()
 
 #define STR_JOIN(JOIN, IT, ITERABLE) \
     [&] { \
         auto const & iterable = ITERABLE; \
         auto const & join = JOIN; \
         std::ostringstream oss; \
         auto first = true; \
         for (auto & it : iterable) { \
             if (!first) \
                 oss << join; \
             oss << IT; \
             first = false; \
         } \
         return oss.str(); \
     }()
 
 #define STR_CASE(CASE) \
     case CASE: return #CASE;
 
 #define STR_COND(VALUE, CASE) \
     (VALUE) == (CASE) ? #CASE :
 
 #define STR_INGIFY1(X) #X
 #define STR_INGIFY2(X) STR_INGIFY1(X)
 
 #define STR_HERE(VALUES) \
     STR(__FILE__ << ":" << STR_INGIFY2(__LINE__) ": " << VALUES)
 
 
 #endif // STR_HPP