Index: llvm/trunk/include/llvm/Support/YAMLTraits.h =================================================================== --- llvm/trunk/include/llvm/Support/YAMLTraits.h +++ llvm/trunk/include/llvm/Support/YAMLTraits.h @@ -863,8 +863,8 @@ mapOptionalWithContext(Key, Val, Ctx); } - template - void mapOptional(const char *Key, T &Val, const T &Default) { + template + void mapOptional(const char *Key, T &Val, const DefaultT &Default) { EmptyContext Ctx; mapOptionalWithContext(Key, Val, Default, Ctx); } @@ -890,10 +890,13 @@ this->processKey(Key, Val, false, Ctx); } - template - void mapOptionalWithContext(const char *Key, T &Val, const T &Default, + template + void mapOptionalWithContext(const char *Key, T &Val, const DefaultT &Default, Context &Ctx) { - this->processKeyWithDefault(Key, Val, Default, false, Ctx); + static_assert(std::is_convertible::value, + "Default type must be implicitly convertible to value type!"); + this->processKeyWithDefault(Key, Val, static_cast(Default), + false, Ctx); } private: Index: llvm/trunk/unittests/Support/YAMLIOTest.cpp =================================================================== --- llvm/trunk/unittests/Support/YAMLIOTest.cpp +++ llvm/trunk/unittests/Support/YAMLIOTest.cpp @@ -823,7 +823,7 @@ io.mapRequired("f1", c.f1); io.mapRequired("f2", c.f2); io.mapRequired("f3", c.f3); - io.mapOptional("f4", c.f4, MyFlags(flagRound)); + io.mapOptional("f4", c.f4, flagRound); } }; } @@ -1327,8 +1327,8 @@ static void mapping(IO &io, TotalSeconds &secs) { MappingNormalization keys(io, secs); - io.mapOptional("hours", keys->hours, (uint32_t)0); - io.mapOptional("minutes", keys->minutes, (uint8_t)0); + io.mapOptional("hours", keys->hours, 0); + io.mapOptional("minutes", keys->minutes, 0); io.mapRequired("seconds", keys->seconds); } };