[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avifile/C++] Молба за съвет о тносно #564868: FTBFS with gcc-4.5
From: |
Yavor Doganov |
Subject: |
[avifile/C++] Молба за съвет о тносно #564868: FTBFS with gcc-4.5 |
Date: |
Wed, 13 Jan 2010 17:36:59 +0200 |
User-agent: |
Wanderlust/2.15.6 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (Gojō) APEL/10.7 Emacs/23.1 (i486-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) |
[ Радвам се, че дебианския списък се върна. ]
[ Списъкът на GUG-BG е в CC, защото ми помогнаха с някои съвети около
моите QA-премеждия с avifile, така че допускам някои от абонатите са
запознати поне бегло с кода. ]
Понеже съм много (ама мноооо) бос по отношение на C++, моля за съвет
относно avifile и #564868.
avifile/1:0.7.48~20090503.ds-2 не се компилира с GCC 4.5 [1]:
common/avm_output.cpp:17:1: error: 'avm::AvmOutput::AvmOutput' names the
constructor, not the type
common/avm_output.cpp:58:1: error: 'avm::AvmOutput::AvmOutput' names the
constructor, not the type
[1] http://bugs.debian.org/564868
Доколкото разбирам, това е следствие от частичната реализация на DR
176 [2] и свързаните DR 382 [3], DR 147 [4] (и може би някои други).
[2] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176
[3] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#382
[4] http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#147
В случая AvmOutput::AvmOutput наистина е конструктора, но понеже типа
е именуван по същия начин, няма как той да се укаже (според моето
съвсем скромно мнение), освен с ключовата дума `typename'. Понеже GCC
4.4 и надолу дават грешка (`typename' е приложимо само за шаблони),
което доколкото разбирам е ненужно ограничение в контекста на новия
стандарт, то е премахнато в ствола [5] на GCC. С други думи, след
доста часове главоблъскане и четене не виждам друг начин за корекция
на тази грешка, така че кода да се компилира с всички (модерни) версии
на GCC.
[5] http://gcc.gnu.org/ml/gcc-patches/2009-06/msg00237.html
Коментари, идеи, други предложения, мъмрене?
За удобство, ето извадка от съответните декларации:
class AVMEXPORT AvmOutput
{
public:
static void createAvmOutput();
static int getLevel() { return m_iLevel; }
static AvmOutput* singleton();
~AvmOutput();
void write(const char* mode, const char* format, ...) _avm_printf_attr(3,
4); // debuglevel 0
void write(const char* mode, int debuglevel, const char* format, ...)
_avm_printf_attr(4, 5); // any debuglevel
void vwrite(const char* mode, const char* format, va_list va)
_avm_printf_attr(3, 0);
void vwrite(const char* mode, int debuglevel, const char* format, va_list
va) _avm_printf_attr(4, 0);
void setDebugLevel(const char* mode, int level);
void resetDebugLevels(int level = 0);
private:
AvmOutput(); //!< Only to be called by
createAvmOutput
AvmOutput(const AvmOutput&); //!< Forbid copy constructor
AvmOutput& operator=(const AvmOutput&); //!< Forbid assignment
void vwrite(const char* format, va_list va) _avm_printf_attr(2, 0);
void flush();
struct AvmOutputPrivate;
struct AvmOutputPrivate* priv;
static AvmOutput* m_pSelf;
static int m_iLevel;
};
static AvmOutput* AvmOutput() { return AvmOutput::singleton(); }
Description: Fix FTBFS with GCC 4.5.
Bug-Debian: http://bugs.debian.org/564868
Author: Yavor Doganov <address@hidden>
Last-Update: 2010-01-13
--- avifile-0.7.48~20090503.ds.orig/lib/common/avm_output.cpp
+++ avifile-0.7.48~20090503.ds/lib/common/avm_output.cpp
@@ -14,7 +14,11 @@ avm::CPU_Info freq; // will be initializ
AVM_BEGIN_NAMESPACE;
+#if __GNUC__ == 4 && __GNUC_MINOR__ >= 5
+typename AvmOutput::AvmOutput* AvmOutput::m_pSelf = 0;
+#else
AvmOutput::AvmOutput* AvmOutput::m_pSelf = 0;
+#endif
int AvmOutput::m_iLevel = 0; // debug level
struct AvmOutput::AvmOutputPrivate
@@ -55,7 +59,11 @@ void AvmOutput::createAvmOutput()
new AvmOutput();
}
+#if __GNUC__ == 4 && __GNUC_MINOR__ >= 5
+typename AvmOutput::AvmOutput* AvmOutput::singleton()
+#else
AvmOutput::AvmOutput* AvmOutput::singleton()
+#endif
{
assert(m_pSelf != 0);
return m_pSelf;
- [avifile/C++] Молба за съвет о тносно #564868: FTBFS with gcc-4.5,
Yavor Doganov <=