Topic: Defining member function templates of class templates out of
Author: greghe@pacbell.net (Greg Herlihy)
Date: Fri, 25 May 2007 02:25:02 GMT Raw View
On 5/24/07 12:39 PM, in article
1180001745.029006.204310@m36g2000hse.googlegroups.com, "Nicola Musatti"
<nicola.musatti@gmail.com> wrote:
> Hallo,
> 14.5.2 (1) states that member function templates of class templates
> may be defined outside of their class template definition. However it
> only provides an example where the member function template has a
> function parameter whose type matches the template parameter. No
> explicit mention is made of whether such an out of line definition is
> allowed when a member function's template arguments cannot be deduced
> from function arguments.
According to the paragraph cited then, it is legal for any member function
template - including one with non-deducible template type parameters - to be
defined outside of its class definition.
> In my opinion the following syntax should be allowed:
>
> template <typename T> struct A {
> template <typename U> void f();
> };
>
> template <typename T> template <typename U>
> void A<T>::f<U>() {
> }
No, f<U> would signify some kind of specialization of the f<> member
template - and not its general definition. The correct definition of f()
would be:
template <typename T> template <typename U>
void A<T>::f() {
}
> This syntax is accepted by one out of the four compilers I tested.
It should not have been accepted by any C++ compiler.
Greg
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]