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] | |
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 toan 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.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |