commit bab2f5e9e77bd41b91ca6eae34483eb159307519
Author: Jason Merrill <jason@redhat.com>
Date: Thu Jun 14 17:28:08 2012 -0700
PR c++/53651
* name-lookup.c (constructor_name_p): Don't try to look at the
name of a DECLTYPE_TYPE.
@@ -1966,6 +1966,11 @@ constructor_name_p (tree name, tree type)
if (TREE_CODE (name) != IDENTIFIER_NODE)
return false;
+ /* These don't have names. */
+ if (TREE_CODE (type) == DECLTYPE_TYPE
+ || TREE_CODE (type) == TYPEOF_TYPE)
+ return false;
+
ctor_name = constructor_name_full (type);
if (name == ctor_name)
return true;
new file mode 100644
@@ -0,0 +1,14 @@
+// PR c++/53651
+// { dg-do compile { target c++11 } }
+
+template<typename> struct wrap { void bar(); };
+
+template<typename T> auto foo(T* t) -> wrap<T>* { return 0; }
+
+template<typename T>
+struct holder : decltype(*foo((T*)0)) // { dg-error "class type" }
+{
+ using decltype(*foo((T*)0))::bar; // { dg-error "is not a base" }
+};
+
+holder<int> h;