Work around a bug with MSVC 10 where it fails to recognize a valid use
authorChandler Carruth <chandlerc@gmail.com>
Sat, 16 Jun 2012 03:54:11 +0000 (03:54 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 16 Jun 2012 03:54:11 +0000 (03:54 +0000)
of typename. GCC and Clang were fine with this, but MSVC won't accept
it. Fortunately, it also doesn't need it. Yuck.

Thanks to Nakamura for pointing this out in IRC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158593 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/ADT/DenseMapTest.cpp

index e04bba7622927ba2089cab7779d51e6fed471006..3fe35c91edcef9db1eb37933da01c457e36b0d28 100644 (file)
@@ -66,8 +66,17 @@ TYPED_TEST(DenseMapTest, EmptyIntMapTest) {
   // Lookup tests
   EXPECT_FALSE(this->Map.count(this->getKey()));
   EXPECT_TRUE(this->Map.find(this->getKey()) == this->Map.end());
+#ifndef _MSC_VER
   EXPECT_EQ(typename TypeParam::mapped_type(),
             this->Map.lookup(this->getKey()));
+#else
+  // MSVC, at least old versions, cannot parse the typename to disambiguate
+  // TypeParam::mapped_type as a type. However, because MSVC doesn't implement
+  // two-phase name lookup, it also doesn't require the typename. Deal with
+  // this mutual incompatibility through specialized code.
+  EXPECT_EQ(TypeParam::mapped_type(),
+            this->Map.lookup(this->getKey()));
+#endif
 }
 
 // Constant map tests