| Title: | C++ |
| Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) |
| Moderator: | DECCXX::AMARTIN |
| Created: | Fri Nov 06 1987 |
| Last Modified: | Thu Jun 05 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 3604 |
| Total number of notes: | 18242 |
I'm having trouble defining a friend function of a template class whose
parameter is a constant expression. I looked through the ARM and I'm still
not any wiser.
**************************** Compiler output
cxx -c templfr.cpp
cxx: Error: templfr.cpp, line 13: The function template "__ls" has a non-type parameter "size".
template <int size>
----------^
**************************** Code Example
// templr.h
template <int size>
class C {
public:
C(const char* ch_);
friend ostream&
operator<<(ostream& os);
private:
char ch[size+1];
};
-------------------------- 8< ---------------------/
// templfr.cpp
#include "templfr.h"
#include <string.h>
template <int size>
C<size>::C(const char* ch_)
{
::strncpy( &ch[0], &ch_[0],
(::strlen(ch_) > (size))? (size) : ::strlen(ch_));
}
template <int size>
ostream& operator<< (ostream& os, const C& c)
// How do I define this function ?
{
return os << &c.ch[0] << endl;
}
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 3521.1 | Same problem as in note 3397? | PEACHS::LAMPERT | Pat Lampert, UNIX Applications Support, 343-1050 | Mon Mar 31 1997 18:18 | 12 |
Just realized thia may already be documented as a restriction. Am I correct? -------------------------------------------------------------------------------- >As documented in Section 1.4.7 of the V5.5 release notes, >under "Current Restrictions": > > o The compiler does not accept a parameter-declaration > (non-type template parameters) for function templates. Pat | |||||
| 3521.2 | DECCXX::COLEEN | Wed Apr 02 1997 15:29 | 13 | ||
Yes, you have found a restriction with the current release of DEC C++. We have lifted this restriction in the next major release of the compiler - V6.0 which is coming out later this year. The only workaround I can think of is to make the << operator a member function rather than a friend, but that may not be what you want it to be. Thanks, Coleen | |||||