Se référant à C++ format macro/inline ostringstreammacro Inline ostringstream rechargées
La question était pour une macro qui permet concaténation en ligne d'objets pour créer une chaîne, iostream style.
La réponse était:
#define SSTR(x) dynamic_cast< std::ostringstream & >(\
(std::ostringstream().seekp(0, std::ios_base::cur) << x) \
).str()
Utilisation (par exemple):
throw std::runtime_error(
SSTR("FooBar error: Value " << x << " exceeds " << y)
);
Cela fonctionne à merveille - avec GCC. Il compile et s'exécute sous Visual C++ 2005 aussi. Mais avec ce dernier, toutes les utilisations de la macro se traduisent par des chaînes vides, et je suis tout à fait stupéfait quant à pourquoi, et comment y remédier ...?
Je ne sais pas ce que MSVC++ fait différemment avec cela, mais en remplaçant ostringstream(). Seekp (0, ios_base :: cabot) avec ostringstream() << std :: décembre (comme suggéré cadabra) fonctionne pour MSVC++ . J'ai laissé une note sur la question initiale pour que les autres ne soient pas pris en défaut. – DevSolar