Re: Defining member function templates of class templates out of
line
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 ]