Fixed double -> int conversion (now throws) for old API

This commit is contained in:
beder
2012-01-12 23:52:51 -06:00
parent 60fa4d7f63
commit 88540cc96a
2 changed files with 21 additions and 4 deletions

View File

@@ -50,8 +50,7 @@ namespace YAML
inline bool Convert(const std::string& input, T& output, typename enable_if<is_numeric<T> >::type * = 0) { inline bool Convert(const std::string& input, T& output, typename enable_if<is_numeric<T> >::type * = 0) {
std::stringstream stream(input); std::stringstream stream(input);
stream.unsetf(std::ios::dec); stream.unsetf(std::ios::dec);
stream >> output; if((stream >> output) && (stream >> std::ws).eof())
if(!!stream)
return true; return true;
if(std::numeric_limits<T>::has_infinity) { if(std::numeric_limits<T>::has_infinity) {

View File

@@ -903,6 +903,23 @@ namespace Test
return doc["foo"].to<std::string>() == "\n"; return doc["foo"].to<std::string>() == "\n";
} }
bool DoubleAsInt()
{
std::string input = "1.5";
std::stringstream stream(input);
YAML::Parser parser(stream);
YAML::Node doc;
parser.GetNextDocument(doc);
try {
doc.to<int>();
} catch(const YAML::InvalidScalar& e) {
return true;
}
return false;
}
} }
namespace { namespace {
@@ -1184,6 +1201,7 @@ namespace Test
RunParserTest(&Parser::NonConstKey, "non const key", passed, total); RunParserTest(&Parser::NonConstKey, "non const key", passed, total);
RunParserTest(&Parser::SingleChar, "single char", passed, total); RunParserTest(&Parser::SingleChar, "single char", passed, total);
RunParserTest(&Parser::QuotedNewline, "quoted newline", passed, total); RunParserTest(&Parser::QuotedNewline, "quoted newline", passed, total);
RunParserTest(&Parser::DoubleAsInt, "double as int", passed, total);
RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed, total); RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed, total);
RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed, total); RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed, total);