This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/10541: Is NULL a valid pointer-type template argument?


Wolfgang Bangerth wrote:

I remember reading a while back that C/C++ considers the value 0 to be a valid value for any pointer type. Hence 0 CAN BE of type char *.



Well, 0 is of type "signed int". It can be converted to any pointer type implicitly. The question is whether the compiler is supposed to do implicit conversions for template args. I don't think so.




Other compilers seem to take this value.



icc doesn't, for example.


   In this posting:
   news://nntp.concentric.net:119/vatbv4b1hbd6d3 at corp dot supernews dot com
   http://groups.google.com/groups?dq=&hl=en&lr=&ie=UTF-8&threadm=b8m2ve%243h4%40dispatch.concentric.net&prev=/groups%3Fhl%3Den%26lr%3D%26ie%3DUTF-8%26group%3Dcomp.lang.c%252B%252B

According to 14.3.2/1 a pointer template argument must be a pointer to
an object with external linkage. 0 is certainly not such a pointer.

Generally, you'll need

IType<char*, someexternarrayname>
or
IType<char*, &someexternchar>

Apparently, Comeau gets this wrong, allowing IType<char *,
static_cast<char *>(0)>.



There is an open issue 354 on this, BTW. I would think that Comeau is just running ahead of the pack (along with EDG, MS, Borland, and Cfront -- as described in the issue). Gcc and Sun are the pack.

Seems like this is an open issue.





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]