[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 20000802: netcdf 3.5-beta3 installation problem on IBM SP
- Subject: Re: 20000802: netcdf 3.5-beta3 installation problem on IBM SP
- Date: Wed, 06 Dec 2000 13:00:07 -0700
>From: Harsh Anand <address@hidden>
>Subject: Re: 20000802: netcdf 3.5-beta3 installation problem on IBM SP
>Organization: LBNL/NERSC
>Keywords: 200008022147.e72LljT08254 netCDF 3.5-beta3 C++ friend
Harsh,
> Sorry for getting back to you this late. It took very long to
> get the standard reference from the IBM tech support.
> Please let me know if this answers your query.
Thanks for sending this. It does answer my question, so I've changed
the code in netCDF 3.5 as a result. Now it should compile on IBM
platforms without the C++ error you were seeing. It will be in the
next beta release, which I'm hoping to get out this week or early next
week ...
--Russ
Here is their response:
>where in the standard the following syntax is disallowed:
>friend NcFile::NcFile( const char *, FileMode, size_t*, size_t);
"The solution to your question is the following section
of the C++ Standard 12.1, paragraph 1.
"Constructors do not have names." Reading further into this paragraph
it states that a constructor is indicated with a special syntax.
"friend" is not in this syntax so it cannot be used in a constructor
declaration/definition. Thus, it is impossible to have a constructor
that is a friend. That said, the same effect can be had by making the
class (for the constructor) a friend so that the constructor would also
be granted friendship."
For your reference here is the URL for the C++ standard:
http://www.dfv.rwth-aachen.de/doc/c++std/special.html#class.conv.ctor
Regards.
Harsh
> >From: Harsh Anand <address@hidden>
> >Subject: netcdf 3.5-beta3 installation problem on IBM SP
> >Organization: LBNL/NERSC
> >Keywords: 200008022147.e72LljT08254 netCDF 3.5-beta3
>
> Hi Harsh,
>
> > I got errors like
> >
> > xlC -c -I../libsrc -I. -DNDEBUG netcdf.cpp
> > "netcdfcpp.h", line 156.10: 1540-0133 (S) The attributes "friend" are
> > not allowed.
> >
> > installing C++ interface on the IBM SP3 we have at NERSC Lawrence
> > Berkeley Lab:
> >
> > FYI -- IBM tech support folks tell me that it is not a bug. According
> > to the
> > standard "The attributes "friend" are not allowed". Could you
> > please suggest any workaround for this problem?
> > I have successfully compiled this program using KAI C++ compiler.
>
> See a previous message for a workaround:
>
> http://www.unidata.ucar.edu/glimpse/netcdf/3814
>
> But I don't understand how this could be non-standard C++. The draft
> standard available from
>
> http://www.cygnus.com/misc/wp/dec96pub/access.html includes the
>
> following example:
>
> 4 When a friend declaration refers to an overloaded name or operator,
> only the function specified by the parameter types becomes a friend.
> A member function of a class X can be a friend of a class Y. [Exam-
> ple:
> class Y {
> friend char* X::foo(int);
> // ...
> };
>
> which uses the same syntax we use. Is it that you can't declare a
> private constructor to be a friend? If so, I haven't seen that
> restriction explicitly stated anywhere. Can you find out where in the
> standard this syntax is disallowed, since no other C++ compiler we
> have tried objects to it?
>
> A less heavy-handed workaround would be to declare the whole NcFile
> class to be a friend rather than just particular member functions,
> that is use
>
> friend NcFile;
>
> instead of
>
> friend NcFile::NcFile( const char *, FileMode, size_t*, size_t);
> friend NcBool NcFile::sync( void );
> friend NcDim* NcFile::add_dim( NcToken, long );
> // to delete dimensions, since destructor is private
> friend NcBool NcFile::close( void );
>
> and similarly for other places where the compiler objects to the
> declarations of particular member functions as friends. But I don't
> understand why this should be necessary ...
>
> --Russ
--
Harsh Anand ---------------------------------- address@hidden -|
NERSC User Services phone: (510) 486-5575 |
Lawrence Berkeley Lab Fax: (510) 486-7520 |
Univ. of California, Berkeley ------------------------------------