Hi,
ms compiler uses access property of class methods for building the mangled name, so you should not change this between versions.
 
In Qt\5.4.0\qt-src\qtbase\src\corelib\kernel\qmetatype.h:643
you find   this code
#ifndef Q_NO_TEMPLATE_FRIENDS
#ifndef Q_QDOC
    template<typename T>
    friend bool qRegisterSequentialConverter();
    template<typename, bool> friend struct QtPrivate::ValueTypeIsMetaType;
    template<typename, typename> friend struct QtPrivate::ConverterMemberFunction;
    template<typename, typename> friend struct QtPrivate::ConverterMemberFunctionOk;
    template<typename, typename, typename> friend struct QtPrivate::ConverterFunctor;
    template<typename T>
    friend bool qRegisterAssociativeConverter();
    template<typename, bool> friend struct QtPrivate::AssociativeValueTypeIsMetaType;
    template<typename, bool> friend struct QtPrivate::IsMetaTypePair;
    template<typename, typename> friend struct QtPrivate::MetaTypeSmartPointerHelper;
#endif
#else
public:
#endif
    static bool registerConverterFunction(const QtPrivate::AbstractConverterFunction *f, int from, int to);
    static void unregisterConverterFunction(int from, int to);
 
you can see public access  depends on Q_NO_TEMPLATE_FRIENDS being defined.
 
if you look at Qt\5.3.2\qt-src\qtbase\src\corelib\global\qcompilerdetection.h:88
you see 
#elif defined(_MSC_VER)
#  define Q_CC_MSVC
#  define Q_CC_MSVC_NET
#  define Q_OUTOFLINE_TEMPLATE inline
#  define Q_NO_TEMPLATE_FRIENDS
 
so Q_NO_TEMPLATE_FRIENDS is defined for every ms compiler.
 
in Qt\5.4.0\qt-src\qtbase\src\corelib\global\qcompilerdetection.h:80
you can see a change:
#elif defined(_MSC_VER)
#  define Q_CC_MSVC (_MSC_VER)
#  define Q_CC_MSVC_NET
#  define Q_OUTOFLINE_TEMPLATE inline
#  if _MSC_VER < 1600
#    define Q_NO_TEMPLATE_FRIENDS
#  endif
 
so in 5.4 registerConverterFunction and unregisterConverterFunction arenow private when build with vs 2010 and above.
 
I have noticed that problem today with an own application ( build with qt before 5.4)  where i get 
The procedure entry point ?unregisterConverterFunction@QMetaType@@SAXHH@Z could not be located in the dynamic link library Qt5Core.dll. 
when looking with depends.exe into the dll i cann only find a ?unregisterConverterFunction@QMetaType@@CAXHH@Z ( note the S/C differnce).
 
making public etc. depend on a define is imho a very bad idea and now we have the result broken binary compatibility, something which i think is taken a lot care of to NOT happen in Qt.
 
 
Regards,
Gunnar
 
 
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to