const char *digits = (f.get_uppercase() ? udigits : ldigits);
if(v)
{
- typename MatchingInt<T>::UnsignedType w = Absolute<T>::eval(v);
+ typename std::make_unsigned<T>::type w = Absolute<T>::eval(v);
while(w)
{
*--ptr = digits[w%base];
}
template<typename T>
-T str_to_int(const std::string &s, const Fmt &f)
+T str_to_int(const string &s, const Fmt &f)
{
if(s.empty())
throw lexical_error("conversion of '' to integer");
- std::string::const_iterator i = s.begin();
+ auto i = s.begin();
// See if the input starts with a sign
bool neg = false;
if(s.empty())
throw lexical_error("conversion of '' to floating-point");
- std::string::const_iterator i = s.begin();
+ auto i = s.begin();
// See if the input starts with a sign
bool neg = false;
void LexicalConverter::result(const string &s)
{
+ filled = true;
if(s.size()<fmt.get_width())
{
if(fmt.get_align()==Fmt::RIGHT)
buf = s;
}
+const string &LexicalConverter::get() const
+{
+ if(!filled)
+ throw lexical_error("conversion not performed");
+ return buf;
+}
+
/*** operator<< ***/
v = str_to_int<char>(c.get(), c.get_fmt());
else
{
- const std::string &s = c.get();
+ const string &s = c.get();
if(s.empty())
throw lexical_error("conversion of '' to character");
if(s.size()>1)