public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/13616] New: fails to look up template specialization of template template parameter involving own template parameters
@ 2004-01-08 16:31 hetadres at email dot com
  2004-01-08 18:21 ` [Bug c++/13616] " pinskia at gcc dot gnu dot org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: hetadres at email dot com @ 2004-01-08 16:31 UTC (permalink / raw)
  To: gcc-bugs

gcc fails to look up a template specialization of a template template parameter 
with a template class, instanciated with one of its own template parameters.

Following code compiles fine, but produces "general" as output, where 
"specialization" would be expected. I did not include a preprocessed version of 
the code, because <iostream> is only used to show wich version of class C is 
instanciated.

Compiled on:
Gentoo Linux 1.4
gcc version 3.2.3 20030422

code:

#include <iostream>

template <
	class T,
	class P
> class PPImpl { };

template<class P> struct PP {
	template<class T> class Type : PPImpl<T, P> { };
};



template <
	class P, 
	template <class> class Q
> class C {
public:
	C() { std::cout << "general\n"; }
};

template <
	class P
> class C <P, PP<P>::Type > {
public:
	C() { std::cout << "specialization\n"; }
};



int main() {
	C<double, PP<double>::Type>c;
}

-- 
           Summary: fails to look up template specialization of template
                    template parameter involving own template parameters
           Product: gcc
           Version: 3.2.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: hetadres at email dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c++/13616] fails to look up template specialization of template template parameter involving own template parameters
  2004-01-08 16:31 [Bug c++/13616] New: fails to look up template specialization of template template parameter involving own template parameters hetadres at email dot com
@ 2004-01-08 18:21 ` pinskia at gcc dot gnu dot org
  2004-01-08 18:41 ` bangerth at dealii dot org
  2004-01-08 18:45 ` bangerth at dealii dot org
  2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-08 18:21 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-01-08 18:21 -------
3.4 produces the following error message (which I think is wrong and I think there is a dup of that 
bug somewhere):
pr13616.cc:24: error: type/value mismatch at argument 2 in template parameter list for 
`template<class P, template<class> class Q> class C'
pr13616.cc:24: error:   expected a class template, got `typename PP<P>::Type'

-- 


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c++/13616] fails to look up template specialization of template template parameter involving own template parameters
  2004-01-08 16:31 [Bug c++/13616] New: fails to look up template specialization of template template parameter involving own template parameters hetadres at email dot com
  2004-01-08 18:21 ` [Bug c++/13616] " pinskia at gcc dot gnu dot org
@ 2004-01-08 18:41 ` bangerth at dealii dot org
  2004-01-08 18:45 ` bangerth at dealii dot org
  2 siblings, 0 replies; 4+ messages in thread
From: bangerth at dealii dot org @ 2004-01-08 18:41 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From bangerth at dealii dot org  2004-01-08 18:41 -------
This is fixed already. First, you need to say 
  class C <P, PP<P>::template Type > { 
in the specialization. Note the "template" keyword here. Then the 
code also yields what you expected with 3.3.3 (and, yes, this 
is indeed very confusing that it yields the right thing with the 
right syntax, and the wrong thing with an invalid syntax). 
 
Present mainline only accepts the correct syntax, and prints the correct 
message in this case. 
 
W. 

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |3.4.0


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c++/13616] fails to look up template specialization of template template parameter involving own template parameters
  2004-01-08 16:31 [Bug c++/13616] New: fails to look up template specialization of template template parameter involving own template parameters hetadres at email dot com
  2004-01-08 18:21 ` [Bug c++/13616] " pinskia at gcc dot gnu dot org
  2004-01-08 18:41 ` bangerth at dealii dot org
@ 2004-01-08 18:45 ` bangerth at dealii dot org
  2 siblings, 0 replies; 4+ messages in thread
From: bangerth at dealii dot org @ 2004-01-08 18:45 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From bangerth at dealii dot org  2004-01-08 18:45 -------
Just for completeness, if someone wants to make a testcase for this: 
take this code 
------------------------ 
template<class P> struct O { 
    template<class T> class I { }; 
}; 
 
template <class, template <class> class> struct A; 
template <class P> struct A <P, O<P>::I> {}; 
 
template <class, template <class> class> struct B; 
template <class P> struct B <P, O<P>::template I> {}; 
 
int main() { 
  A<double, O<double>::I> a; 
  B<double, O<double>::I> b; 
} 
------------------------- 
3.3.x accepts the specializations, but whines when declaring "a" 
that we use an incomplete type. It doesn't do so for B, though. 
 
Present mainline doesn't accept the specialization right away. That's 
the correct behavior. 
 
W. 

-- 


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


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-01-08 18:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-08 16:31 [Bug c++/13616] New: fails to look up template specialization of template template parameter involving own template parameters hetadres at email dot com
2004-01-08 18:21 ` [Bug c++/13616] " pinskia at gcc dot gnu dot org
2004-01-08 18:41 ` bangerth at dealii dot org
2004-01-08 18:45 ` bangerth at dealii dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).