[Bug c++/13640] New: [3.3/3.4 regression] Failing to reject class template partial specialization which can never be selected

giovannibajo at libero dot it gcc-bugzilla@gcc.gnu.org
Sat Jan 10 20:08:00 GMT 2004


This is basically c++/7033, cleaned and simplified. Comment 6 (quoting myself):

---------------------------------------------------------------------------
 I'm confident that defining a partial template
 specialization whose arguments can't be fully deduced from the arguments of
 the original template is ill-formed. In fact, GCC correctly rejects this:
 
 -----------------------------------------------
 template <class> struct K;
 
 template <class T>
 struct K<int> {};
 -----------------------------------------------
 pr7033.cpp:4: error: template parameters not used in partial specialization:
 pr7033.cpp:4: error:         `T'
 
 but it fails to reject this:
 
 -----------------------------------------------
 template <typename, typename> struct S;
 
 template <template <typename> class C,
 typename T,
 typename V>
 struct S<C<T>,typename C<T>::template it<V> > {};
 -----------------------------------------------
 
 which is currently accepted by 3.3 and 3.4, even if "V" is used only in
 non-deduced contexts. This is a regression (rechecked on CVS 20050305 for
 both 3.3 and 3.4) with respect to 2.95 which was rejecting the code:
 
 pr7033.cpp:6: template parameters not used in partial specialization:
 pr7033.cpp:6:         `V'
 
 (actually, the error message could be "template parameter used in
 non-decuded context", but anyway).
 
 This is an accepts-invalid regression, and I now flagged it as such.
---------------------------------------------------------------------------

I am not sure the code is ill-formed. Maybe the specialization can be created 
but it makes no sense. Since we *used* to reject this, and we are silently
accepting it now, we still have a regression. At the very least, we should
emit a friendly warning for the user.

-- 
           Summary: [3.3/3.4 regression] Failing to reject class template
                    partial specialization which can never be selected
           Product: gcc
           Version: 3.4.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: giovannibajo at libero dot it
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13640



More information about the Gcc-bugs mailing list