Boost compile error on converting UUID to string using boost::lexical_cast
Asked Answered
M

2

5

I have this code which is based on several posts in SO:

boost::uuids::uuid uuid = boost::uuids::random_generator()();
auto uuidString= boost::lexical_cast<std::string>(uuid);

but when I am compiling this code, I am getting this error:

Source type is neither std::ostream`able nor std::wostream`able     C:\Local\boost\boost\lexical_cast\detail\converter_lexical.hpp  

How can I fix this error?

Microfilm answered 14/4, 2015 at 15:12 Comment(0)
B
12

You're missing the include, I guess:

Live On Coliru

#include <boost/lexical_cast.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/random_generator.hpp>

int main() {
    boost::uuids::uuid uuid = boost::uuids::random_generator()();
    auto uuidString = boost::lexical_cast<std::string>(uuid);
}
Ba answered 14/4, 2015 at 15:26 Comment(1)
just to be clear, it's uuid_io.hpp that seems to be necessary for the lexical cast operation, both to and from uuid/string. In my case CLion warns that it's unused, but if you remove it you'll have issues similar to the OP.Plowboy
S
3

You could try:

std::stringstream ss;
std::string       uuidStr;

boost::uuids::uuid uuid = boost::uuids::random_generator()();

ss << uuid;
ss >> uuidStr;

The Documentation states:

Stream Operators

The standard input and output stream operators << and >> are provided by including boost/uuid/uuid_io.hpp. The string representation of a uuid is hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh where h is a hexidecimal digit.

boost::uuids::uuid u1; // initialize uuid

std::stringstream ss;
ss << u1;

boost::uuids::uuid u2;
ss >> u2;

assert(u1, u2);

However the lexical_cast should work as well.

Maybe you should check what uuid actually contains to figure out if there's something wrong with the generated uuid.

Also:

boost::uuids::uuid u; // initialize uuid

std::string s1 = to_string(u);

should be slightly faster according to the doc.

Serb answered 14/4, 2015 at 15:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.