diff options
| -rw-r--r-- | llvm/include/llvm/Support/YAMLTraits.h | 13 | ||||
| -rw-r--r-- | llvm/unittests/Support/YAMLIOTest.cpp | 6 |
2 files changed, 11 insertions, 8 deletions
diff --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h index e991f3b3be1..b80c7426d9b 100644 --- a/llvm/include/llvm/Support/YAMLTraits.h +++ b/llvm/include/llvm/Support/YAMLTraits.h @@ -863,8 +863,8 @@ public: mapOptionalWithContext(Key, Val, Ctx); } - template <typename T> - void mapOptional(const char *Key, T &Val, const T &Default) { + template <typename T, typename DefaultT> + void mapOptional(const char *Key, T &Val, const DefaultT &Default) { EmptyContext Ctx; mapOptionalWithContext(Key, Val, Default, Ctx); } @@ -890,10 +890,13 @@ public: this->processKey(Key, Val, false, Ctx); } - template <typename T, typename Context> - void mapOptionalWithContext(const char *Key, T &Val, const T &Default, + template <typename T, typename Context, typename DefaultT> + void mapOptionalWithContext(const char *Key, T &Val, const DefaultT &Default, Context &Ctx) { - this->processKeyWithDefault(Key, Val, Default, false, Ctx); + static_assert(std::is_convertible<DefaultT, T>::value, + "Default type must be implicitly convertible to value type!"); + this->processKeyWithDefault(Key, Val, static_cast<const T &>(Default), + false, Ctx); } private: diff --git a/llvm/unittests/Support/YAMLIOTest.cpp b/llvm/unittests/Support/YAMLIOTest.cpp index cf279ffd4c2..941a765a3c1 100644 --- a/llvm/unittests/Support/YAMLIOTest.cpp +++ b/llvm/unittests/Support/YAMLIOTest.cpp @@ -823,7 +823,7 @@ namespace yaml { 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 @@ namespace yaml { static void mapping(IO &io, TotalSeconds &secs) { MappingNormalization<NormalizedSeconds, TotalSeconds> 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); } }; |

