Re: new foo::foo() erroneous, ugly, or OK?
usenet@schweikhardt.net wrote:
gcc accepts the following code, while
FlexeLint 8.00u reports an error:
$ cat foo.cpp
class foo {
public:
foo() { }
};
int main (void)
{
foo *myfoo = new foo::foo();
delete myfoo;
return 0;
}
---snip---
FlexeLint for C/C++ (Unix) Vers. 8.00u, Copyright
Gimpel Software 1985-2006
--- Module: foo.cpp (C++)
_
foo *myfoo = new foo::foo();
foo.cpp 8 Error 1018: Expected a type after 'new'
[...]
I'm not a C++ expert, so my question to the resident AI is:
Is this in fact an error, or does the C++ standard
allow this syntactically/semantically?
It is perfectly fine. 'foo' _class_ owns the name 'foo' as its
own type. 'foo::foo' is just as good as a *type-id* as, for
example 'foo::foo::foo::foo::foo::foo'. There should be no error
report. FlexeLint is buggy (as much as they love touting their
own horn, thier software is written by people too).
Of course the remedy is to remove the "foo::", but
nevertheless, isn't FlexeLint too picky or misleading here?
No, FlexeLint authors just don't know all of C++ as they should.
Where on the scale from "erroneous--ugly--unusual--perfectly fine"
is this construct?
All the way to the right.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]