Bug#271121: vdr-plugin-freecell: FTBFS with gcc-3.4: dependent-name ` cTBList<T>::cItem' is parsed as a non-type, but instantiation yields a type

Andreas Jochens pkg-vdr-dvb-devel@lists.alioth.debian.org
Sat, 11 Sep 2004 12:55:04 +0200


Package: vdr-plugin-freecell
Severity: normal
Tags: patch

When building 'vdr-plugin-freecell' with gcc-3.4 I get the following error:

tools/list.h:288:   instantiated from `T& cTBList<T>::Append() [with T = cTBString]'
tools/list.h:307:   instantiated from `void cTBList<T>::Append(const T&) [with T = cTBString]'
tools/list.h:535:   instantiated from here
tools/list.h:206: error: dependent-name ` cTBList<T>::cItem' is parsed as a non-type, but instantiation yields a type
tools/list.h:206: note: say `typename  cTBList<T>::cItem' if a type is meant
tools/list.h: In member function `typename cTBList<T>::cItem* cTBList<T>::Unlink() [with T = cCard*]':
tools/list.h:398:   instantiated from `T cTBList<T>::Take() [with T = cCard*]'
tools/list.h:66:   instantiated from `T cTBList<T>::TakeFirst() [with T = cCard*]'
cards.c:64:   instantiated from here
tools/list.h:341: error: dependent-name ` cTBList<T>::cItem' is parsed as a non-type, but instantiation yields a type
tools/list.h:341: note: say `typename  cTBList<T>::cItem' if a type is meant
tools/list.h: In member function `typename cTBList<T>::cItem* cTBList<T>::NewItem(cTBList<T>::cItem*, cTBList<T>::cItem*) const [with T = cCard*]':
tools/list.h:288:   instantiated from `T& cTBList<T>::Append() [with T = cCard*]'
tools/list.h:307:   instantiated from `void cTBList<T>::Append(const T&) [with T = cCard*]'
cards.c:71:   instantiated from here
tools/list.h:206: error: dependent-name ` cTBList<T>::cItem' is parsed as a non-type, but instantiation yields a type
tools/list.h:206: note: say `typename  cTBList<T>::cItem' if a type is meant
make[1]: *** [cards.o] Error 1
make[1]: Leaving directory `/vdr-plugin-freecell-0.0.1'
make: *** [build-stamp] Error 2

With the attached patch 'vdr-plugin-freecell' can be compiled using gcc-3.4.

Regards
Andreas Jochens

diff -urN ../tmp-orig/vdr-plugin-freecell-0.0.1/tools/list.h ./tools/list.h
--- ../tmp-orig/vdr-plugin-freecell-0.0.1/tools/list.h	2004-02-11 13:33:26.000000000 +0100
+++ ./tools/list.h	2004-09-11 12:52:20.473217385 +0200
@@ -90,22 +90,22 @@
 	T &SetNextCurrent  ();
 	T &SetPrevCurrent  ();
 
-	friend cTBList<T> &operator+= <> (cTBList<T> &list1, const cTBList<T> &list2);
-	friend cTBList<T> &operator+= <> (cTBList<T> &list, const T &element);
+//	friend cTBList<T> &operator+= <> (cTBList<T> &list1, const cTBList<T> &list2);
+//	friend cTBList<T> &operator+= <> (cTBList<T> &list, const T &element);
 
-	friend cTBList<T> operator+ <> (const cTBList<T> &list1, const cTBList<T> &list2);
-	friend cTBList<T> operator+ <> (const T &element, const cTBList<T> &list);
-	friend cTBList<T> operator+ <> (const cTBList<T> &list, const T &element);
+//	friend cTBList<T> operator+ <> (const cTBList<T> &list1, const cTBList<T> &list2);
+//	friend cTBList<T> operator+ <> (const T &element, const cTBList<T> &list);
+//	friend cTBList<T> operator+ <> (const cTBList<T> &list, const T &element);
 
 	/*friend cSource &operator<< <> (cSource &dest, const cTBList<T> &list);
-	friend cSource &operator>> <> (cSource &dest, cTBList<T> &list);*/
+//	friend cSource &operator>> <> (cSource &dest, cTBList<T> &list);*/
 };
 
 // Template Implementation (inline funcs)
 
 template<class T>
 inline int cTBList<T>::Find (const T & i) {
-	cTBList<T>::cItem *item = m_First;
+	typename cTBList<T>::cItem *item = m_First;
 	int index = 0;
 
 	while (item && (item->Data != i)) {
@@ -203,7 +203,7 @@
 
 template<class T>
 typename cTBList<T>::cItem *cTBList<T>::NewItem (cTBList<T>::cItem *pBefore, cTBList<T>::cItem *pAfter) const {
-	cTBList<T>::cItem *item = new cTBList<T>::cItem;
+	typename cTBList<T>::cItem *item = new typename cTBList<T>::cItem;
 
 	item->Next = pAfter;
 	item->Prev = pBefore;
@@ -235,7 +235,7 @@
 	if ((int)idx == m_CurPos)
 		return m_Current;
 
-	cTBList<T>::cItem *item;
+	typename cTBList<T>::cItem *item;
 	int dist = idx - m_CurPos;
 	bool direct;
 
@@ -271,7 +271,7 @@
 
 template<class T>
 T &cTBList<T>::Prepend () {
-	cTBList<T>::cItem *item = NewItem(NULL, m_First);
+	typename cTBList<T>::cItem *item = NewItem(NULL, m_First);
 
 	m_First = m_Current = item;
 	if (!m_Last)
@@ -285,7 +285,7 @@
 
 template<class T>
 T &cTBList<T>::Append () {
-	cTBList<T>::cItem *item = NewItem(m_Last, NULL);
+	typename cTBList<T>::cItem *item = NewItem(m_Last, NULL);
 
 	m_Last = m_Current = item;
 	if (!m_First)
@@ -317,13 +317,13 @@
 		return true;
 	}
 
-	cTBList<T>::cItem *nextItem = Locate(idx);
+	typename cTBList<T>::cItem *nextItem = Locate(idx);
 	if (!nextItem)
 		return false;
 
-	cTBList<T>::cItem *prevItem = nextItem->Prev;
+	typename cTBList<T>::cItem *prevItem = nextItem->Prev;
 
-	cTBList<T>::cItem *item = NewItem(prevItem, nextItem);
+	typename cTBList<T>::cItem *item = NewItem(prevItem, nextItem);
 	item->Data = i;
 
 	m_CurPos = idx;
@@ -338,7 +338,7 @@
 	if (!m_Current)
 		return NULL;
 
-	cTBList<T>::cItem *item = m_Current;
+	typename cTBList<T>::cItem *item = m_Current;
 	if (item == m_First) {
 		if (m_First = item->Next)
 			m_First->Prev = NULL;
@@ -370,7 +370,7 @@
 		if (Find(i) == -1)
 			return false;
 
-	cTBList<T>::cItem *item = Unlink();
+	typename cTBList<T>::cItem *item = Unlink();
 	if (!item)
 		return false;
 
@@ -383,7 +383,7 @@
 	if (!Locate(idx))
 		return false;
 
-	cTBList<T>::cItem *item = Unlink();
+	typename cTBList<T>::cItem *item = Unlink();
 	if (!item)
 		return false;
 
@@ -412,13 +412,13 @@
 
 template<class T>
 void cTBList<T>::Clear () {
-	cTBList<T>::cItem *item = m_First;
+	typename cTBList<T>::cItem *item = m_First;
 
 	m_First = m_Last = m_Current = NULL;
 	m_Count = 0;
 	m_CurPos = -1;
 
-	cTBList<T>::cItem *Prev;
+	typename cTBList<T>::cItem *Prev;
 	while (item) {
 		Prev = item;
 		item = item->Next;