[cfe-commits] r83548 - /cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp

Douglas Gregor dgregor at apple.com
Thu Oct 8 08:27:06 PDT 2009


Author: dgregor
Date: Thu Oct  8 10:27:05 2009
New Revision: 83548

URL: http://llvm.org/viewvc/llvm-project?rev=83548&view=rev
Log:
More testing for explicit specializations of member class templates

Modified:
    cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp

Modified: cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp?rev=83548&r1=83547&r2=83548&view=diff

==============================================================================
--- cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp (original)
+++ cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p2.cpp Thu Oct  8 10:27:05 2009
@@ -58,7 +58,8 @@
   struct Inner : public T { }; // expected-note 3{{here}}
   
   template<typename U>
-  struct InnerTemplate : public T { };
+  struct InnerTemplate : public T { }; // expected-note 2{{explicitly specialized}} \
+   // expected-error{{base specifier}}
   
   template<typename U>
   void ft1(T t, U u);
@@ -170,15 +171,40 @@
 N0::X0<float>::Inner inner3;
 N0::X0<double>::Inner inner4; // expected-error{{incomplete}}
 
-#if 0
-// FIXME: update the remainder of this test to check for scopes properly.
 //    -- member class template of a class template
-template<>
-template<>
-struct X0<void*>::InnerTemplate<int> { };
+namespace N0 {
+  template<>
+  template<>
+  struct X0<void*>::InnerTemplate<int> { };
+  
+  template<> template<>
+  struct X0<int>::InnerTemplate<int>; // expected-note{{forward declaration}}
+
+  template<> template<>
+  struct X0<int>::InnerTemplate<long>;
 
-X0<void*>::InnerTemplate<int> inner_template0;
+  template<> template<>
+  struct X0<int>::InnerTemplate<double>;
+}
+
+template<> template<>
+struct N0::X0<int>::InnerTemplate<long> { }; // okay
+
+template<> template<>
+struct N0::X0<int>::InnerTemplate<float> { }; // expected-error{{class template specialization}}
 
+namespace N1 {
+  template<> template<>
+  struct N0::X0<int>::InnerTemplate<double> { }; // expected-error{{enclosing}}
+}
+
+N0::X0<void*>::InnerTemplate<int> inner_template0;
+N0::X0<int>::InnerTemplate<int> inner_template1; // expected-error{{incomplete}}
+N0::X0<int>::InnerTemplate<long> inner_template2;
+N0::X0<int>::InnerTemplate<unsigned long> inner_template3; // expected-note{{instantiation}}
+
+#if 0
+// FIXME: update the remainder of this test to check for scopes properly.
 //    -- member function template of a class template
 template<>
 template<>





More information about the cfe-commits mailing list