piklab fails to build in rawhide

Kevin Kofler kevin.kofler at chello.at
Mon Jan 31 16:29:51 UTC 2011


Alain Portal wrote:
> Unfortunately, another fail occurs at line 18004 of build.log:
> 
> In file included from
> /builddir/build/BUILD/piklab-0.15.10/src/devices/pic/xml/pic_xml_to_data.cpp:13:0:
> /builddir/build/BUILD/piklab-0.15.10/src/xml_to_data/device_xml_to_data.h:
> In member function 'void Device::XmlToData<DataType>::output() [with
> DataType = Pic::Data]':
> /builddir/build/BUILD/piklab-0.15.10/src/devices/pic/xml/pic_xml_to_data.cpp:740:1:
>   instantiated from here
> /builddir/build/BUILD/piklab-0.15.10/src/xml_to_data/device_xml_to_data.h:64:7:
> error: invalid conversion from 'const Pic::Data*' to 'Pic::Data*'
> [-fpermissive]
> /usr/lib64/qt-3.3/include/qvaluelist.h:530:14: error:   initializing
> argument 1 of 'QValueList<T>::iterator QValueList<T>::append(const T&)
> [with T = Pic::Data*, QValueList<T>::iterator =
> QValueListIterator<Pic::Data*>]' [-fpermissive]
> 
> I'm unable to fix as I know nothing about C++.
> Perhaps I have to report upstream?

That one is a bug in Piklab:
    QValueList<DataType *> list;
    for (QMap<QString, Data *>::const_iterator it=_map.begin(); it!=_map.end(); ++it)
      list.append(static_cast<const DataType *>(it.data()));

That code is trying to append a const DataType * to a QValueList<DataType *>,
i.e. a list of (non-const) DataType *. The const needs to go away:
-      list.append(static_cast<const DataType *>(it.data()));
+      list.append(static_cast<DataType *>(it.data()));

To be clear (and in case upstream asks whether removing the const is valid):
QMap<QString, Data *>::const_iterator::data() returns a Data * const &, not a
const Data * & nor a const Data * const &. It is valid and safe to static_cast
a Data * const & to DataType *.

I committed the trivial fix for you:
http://pkgs.fedoraproject.org/gitweb/?p=piklab.git;a=blob;f=piklab-0.15.10-gcc46.patch;h=e53b594db423ea312d5f250055318f4355e7b448;hb=HEAD
and built piklab successfully. Please send the fix upstream.

        Kevin Kofler



More information about the devel mailing list