This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: g++ 3.4 more restrictive than g++ 3.3 ?
On Fri, Jul 15, 2005 at 04:01:19PM +0200, Mathieu Fluhr wrote:
> Thanks for you quick answer. So I assume the best solution is to patch
> all C++ files that brings errors... Lots of work in perspective ;-)
>
but necessary
> BtW, regarding your PS, what is the difference between
> `int main(void)` and `int main()` ?
>
it's just that I'm not aware of text in the standard
granting the use of `int main(void)`, while `int main()`
definitely is correct, so it might be that at some
time in the future `int main(void)` has to be changed
to `int main()`, and so I would avoid it.
Oliver
> Mathieu
>
> On ven, 2005-07-15 at 14:09 +0100, Oliver Kullmann wrote:
> > On Fri, Jul 15, 2005 at 02:46:50PM +0200, Mathieu Fluhr wrote:
> > > Hello all
> > >
> > > I'm just wondering about some differences between g++ 3.3 (3.3.6) and
> > > g++ 3.4 (3.4.5). Please have a look to this piece of code:
> > >
> > > ---8<---------------------------------------------
> > > #include <iostream>
> > >
> > > template <class ValueType>
> > > class A
> > > {
> > > protected:
> > > ValueType m_Field;
> > > };
> > >
> > > template <class ValueType>
> > > class B : public A<ValueType>
> > > {
> > > void TestParam(ValueType i)
> > > {
> > > m_Field = i;
> > > }
> > > };
> > >
> > > int main(void)
> > > {
> > > return 0;
> > > }
> > >
> > > ---8<---------------------------------------------
> > >
> > > As far as I know the C++ language, syntax seems to be correct, and g++
> > > 3.3 does not output any error/warning (even with -Wall option). The
> > > problem is that g++ 3.4 (and 4.0 btw) outputs the following:
> > >
> > > For g++ 3.4:
> > >
> > > Inherit.cpp: In member function `void
> > > B<ValueType>::TestParam(ValueType)':
> > > Inherit.cpp:16: error: `m_Field' undeclared (first use this function)
> > > Inherit.cpp:16: error: (Each undeclared identifier is reported only once
> > > for each function it appears in.)
> > >
> > > For g++ 4.0:
> > >
> > > Inherit.cpp: In member function 'void
> > > B<ValueType>::TestParam(ValueType)':
> > > Inherit.cpp:16: error: 'm_Field' was not declared in this scope
> > >
> > >
> > > The very weird thing is that if I change the line 16 from
> > > m_Field = i;
> > > to
> > > this->m_Field = i;
> > >
> > > everything works without any kind of problem !!! So is this behaviour
> > > normal ?
> > >
> >
> > Hi,
> >
> > that's exactly correct: class B has a dependent base class, and
> > thus members of this base class have to be qualified (see the standard,
> > paragraph 14.6.2, point 4).
> >
> > Oliver
> >
> > P.S. A minor point: I think "int main(void)" is not standard
> > --- according to 3.6.1, point 2 only "int main()" is guaranteed
> > to work.
> >
>
--
Dr. Oliver Kullmann
Computer Science Department
University of Wales Swansea
Faraday Building, Singleton Park
Swansea SA2 8PP, UK
http://cs-svr1.swan.ac.uk/~csoliver/