Qt
  1. Qt
  2. QTBUG-22829

boost 1.48, Qt and [Parse error at "BOOST_JOIN"] error

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: P2: Important P2: Important
    • Resolution: Done
    • Affects Version/s: 4.7.3, 4.7.4, 4.8.0, 4.8.1
    • Fix Version/s: 5.0.0
    • Component/s: Build tools: moc
    • Labels:
      None

      Description

      I have large project with the mix of Qt and boost. I keep upgrading both Qt and boost to the latest available production releases. Currently I am on Qt 4.7.3 and boost 1.47. Recently a new boost build, 1.48 was released. When I compiled my project with this new boost release I started to get multiple errors "Parse error at "BOOST_JOIN", pointing to boost/type_traits/detail/has_binary_operator.hp(50)

      Naturally I thought that this is the boost problem, switched back to 1.47 and problem dissappeared. I posted the report on boost. I also found out that that this issue was already discussed in another boost thread and the conclusion was that it is MOCC bug. I received responses to my boost report where it was stated that the maintainer of the boost library definitely points out to a bug in Qt MOC compiler.

      Following are the links to the discussion:

      http://groups.google.com/group/boost-list/browse_thread/thread/212fa3fa2f712206
      http://groups.google.com/group/boost-list/browse_thread/thread/1642b52217e30ff7/313695d3024a0234?show_docid=313695d3024a0234

      Last link suggests workaround for Qt, but it looks to be specific to the software they discuss.

      I believe that it might affect quite a large number of people/projects. I will appreciate if you can suggest a generic workaround to fix this issue.

      Please let me know if I can be of any assistance.

        Issue Links

          Activity

          Hide
          Steven Peters added a comment -

          The BOOST_TT_HAS_OPERATOR_HPP_INCLUDED workaround isn't always working with boost 1.53 because some of the type_traits headers are being included outside of has_operator.hpp, for example lexical_cast.hpp includes has_left_shift.hpp, which includes has_binary_operator.hpp

          http://www.boost.org/doc/libs/1_53_0/boost/lexical_cast.hpp
          http://www.boost.org/doc/libs/1_53_0/boost/type_traits/has_left_shift.hpp

          An alternative workaround is -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

          Show
          Steven Peters added a comment - The BOOST_TT_HAS_OPERATOR_HPP_INCLUDED workaround isn't always working with boost 1.53 because some of the type_traits headers are being included outside of has_operator.hpp, for example lexical_cast.hpp includes has_left_shift.hpp, which includes has_binary_operator.hpp http://www.boost.org/doc/libs/1_53_0/boost/lexical_cast.hpp http://www.boost.org/doc/libs/1_53_0/boost/type_traits/has_left_shift.hpp An alternative workaround is -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
          Hide
          Vivek Ayer added a comment -

          I'm seeing this issue using Qt 4.8.5, Boost 1.54.0, GCC 4.8.1 on CentOS 6.4. So what's the workaround? Thanks

          Show
          Vivek Ayer added a comment - I'm seeing this issue using Qt 4.8.5, Boost 1.54.0, GCC 4.8.1 on CentOS 6.4. So what's the workaround? Thanks
          Hide
          Steven Peters added a comment -

          The workaround that we use is to wrap boost headers in an ifdef directive. See the following pull request for an example:
          https://bitbucket.org/osrf/sdformat/pull-request/14/fix-for-qt-bug-22829/diff

          Show
          Steven Peters added a comment - The workaround that we use is to wrap boost headers in an ifdef directive. See the following pull request for an example: https://bitbucket.org/osrf/sdformat/pull-request/14/fix-for-qt-bug-22829/diff
          Hide
          mar-na added a comment -

          Only for info: See also with Qt 4.8.6 + boost 1.57.0 + include <boost/signals2.hpp>

          Show
          mar-na added a comment - Only for info: See also with Qt 4.8.6 + boost 1.57.0 + include <boost/signals2.hpp>
          Hide
          Uwe Kindler added a comment -

          Only for info: See also with Qt 4.8.6 + boost 1.57.0 + include <boost/property_tree/ptree.hpp>

          Show
          Uwe Kindler added a comment - Only for info: See also with Qt 4.8.6 + boost 1.57.0 + include <boost/property_tree/ptree.hpp>

            People

            • Assignee:
              Olivier Goffart (Woboq GmbH)
              Reporter:
              Michael B
            • Votes:
              16 Vote for this issue
              Watchers:
              28 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: