Index: include/llvm/ADT/DenseMap.h =================================================================== --- include/llvm/ADT/DenseMap.h +++ include/llvm/ADT/DenseMap.h @@ -40,7 +40,23 @@ template struct DenseMapPair : public std::pair { - using std::pair::pair; + // FIXME: Switch to inheriting constructors when we drop support for older + // clang versions. + // NOTE: This default constructor is declared with '{}' rather than + // '= default' to work around a bug in clang-800. + DenseMapPair() {} + + template + DenseMapPair(AltKeyT &&AltKey, AltValueT &&AltValue, + typename std::enable_if::value && + std::is_convertible::value>::type* = 0) + : std::pair(std::forward(AltKey), + std::forward(AltValue)) {} + + template + DenseMapPair(AltPairT &&AltPair, + typename std::enable_if>::value>::type* = 0) + : std::pair(std::forward(AltPair)) {} KeyT &getFirst() { return std::pair::first; } const KeyT &getFirst() const { return std::pair::first; }