Am 04.01.2012 21:04, schrieb Ville Skyttä:
This is the PR24163 case mentioned in
http://article.gmane.org/gmane.linux.redhat.fedora.devel/157671
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;
templateclass T class B {
typedef int A;
};
templateclass T struct X : BT {
A a;// a has type double
};
The type name A in the definition of XT binds to the typedef name defined
in the global namespace
scope, not to the typedef name defined in the base class BT. ]
In our case, I'm not sure if another solution would be to pull in the
Add() method manually, by adding an
using cListT::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 cListT::First;
.
Cheers,
Udo
___
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr