#include #include #include #include #include namespace qi = boost::spirit::qi; namespace px = boost::phoenix; static qi::uint_parser hx; boost::uuids::uuid from_string(const std::string& rep) { boost::uuids::uuid u; std::string::const_iterator rep_begin = rep.begin(); std::string::const_iterator rep_end = rep.end(); const bool okay = boost::spirit::qi::parse( rep_begin, rep_end, hx[ px::ref(u.data[0]) = qi::_1 ] > hx[ px::ref(u.data[1]) = qi::_1 ] > hx[ px::ref(u.data[2]) = qi::_1 ] > hx[ px::ref(u.data[3]) = qi::_1 ] > '-' > hx[ px::ref(u.data[4]) = qi::_1 ] > hx[ px::ref(u.data[5]) = qi::_1 ] > '-' > hx[ px::ref(u.data[6]) = qi::_1 ] > hx[ px::ref(u.data[7]) = qi::_1 ] > '-' > hx[ px::ref(u.data[8]) = qi::_1 ] > hx[ px::ref(u.data[9]) = qi::_1 ] > // enable this line (or any other line below) and you'll see the error '-' > // hx[ px::ref(u.data[10]) = qi::_1 ] > // hx[ px::ref(u.data[11]) = qi::_1 ] > // hx[ px::ref(u.data[12]) = qi::_1 ] > // hx[ px::ref(u.data[13]) = qi::_1 ] > // hx[ px::ref(u.data[14]) = qi::_1 ] > hx[ px::ref(u.data[15]) = qi::_1 ] ); if(!okay) throw std::runtime_error("cannot parse string \"" + rep + "\" as a UUID"); return u; } int main() { boost::uuids::uuid u = from_string("f0cbb6f6-3c39-42e0-bfac-5a34a2900f1d"); return u.data[0]; }