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                      ]