Am 04.01.2012 21:04, schrieb Ville Skyttä:
> This is the PR24163 case mentioned in
> diff --git a/config.h b/config.h
> index 7825364..b0233a9 100644
> --- a/config.h
> +++ b/config.h
> @@ -122,7 +122,7 @@ public:
>                  if (!isempty(s)) {
>                     T *l = new T;
>                     if (l->Parse(s))
> -                      Add(l);
> +                      this->Add(l);
>                     else {
>                        esyslog("ERROR: error in %s, line %d", fileName, line);
>                        delete l;

This is one of the cases where it seems appropriate to have a lawyer for
every C++ coder, just in case he needs to wrangle the standard...

For info, the above references 14.6.2/3 of the ISO C++ standard, which is:
> In the definition of a class template or a member of a class template, if a 
> base class of the class template
> depends on a template-parameter, the base class scope is not examined during 
> unqualified name lookup
> either at the point of definition of the class template or member or during 
> an instantiation of the class tem-
> plate or member. [Example:
>         typedef double A;
>         template<class T> class B {
>                    typedef int A;
>         };
>         template<class T> struct X : B<T> {
>                    A a;                    // a has type double
>         };
> The type name A in the definition of X<T> binds to the typedef name defined 
> in the global namespace
> scope, not to the typedef name defined in the base class B<T>. ]

In our case, I'm not sure if another solution would be to pull in the
Add() method manually, by adding an
  using cList<T>::Add;
to the class definition.

There's a similar use of this->First() in Save() that already requires
the this-> in current compilers, and it can also be resolved by an
  using cList<T>::First;



vdr mailing list

Reply via email to