[pkg-boost-devel] Bug#703325: libboost1.50-dev: Compile errors when `boost/chrono/duration.hpp` and `apache2/httpd.h` are included

Kirill Spitsin tn at 0x746e.org.ua
Mon Mar 18 14:36:29 UTC 2013


Package: libboost1.50-dev
Version: 1.50.0-2
Severity: normal

Dear Maintainer,

When trying to compile such file:

    % cat test.cpp
    #include <apache2/httpd.h>
    #include <boost/chrono/duration.hpp>
    int main() {}

I'm getting the following error:

    % gcc -lboost_system -I/usr/include/apr-1.0 1.cpp
    In file included from 1.cpp:2:0:
    /usr/include/boost/chrono/duration.hpp: In function ‘typename boost::enable_if<boost::mpl::and_<boost::is_convertible<Rep1, typename boost::common_type<Rep1, Rep2>::type>, boost::is_convertible<Rep2, typename boost::common_type<Rep1, Rep2>::type> >, boost::chrono::duration<typename boost::common_type<Rep1, Rep2>::type, Period> >::type boost::chrono::operator*(const boost::chrono::duration<Rep1, Period>&, const Rep2&)’:
    /usr/include/boost/chrono/duration.hpp:566:54: error: expected unqualified-id before numeric constant
    /usr/include/boost/chrono/duration.hpp:567:34: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Rep, class Period> class boost::chrono::duration’
    /usr/include/boost/chrono/duration.hpp:567:34: error:   expected a type, got ‘13’
    /usr/include/boost/chrono/duration.hpp:567:38: error: invalid type in declaration before ‘;’ token
    /usr/include/boost/chrono/duration.hpp:568:23: error: request for member ‘count’ in ‘(CD)(d)’, which is of non-class type ‘CD {aka int}’
    /usr/include/boost/chrono/duration.hpp:568:16: error: expected primary-expression before ‘(’ token
    /usr/include/boost/chrono/duration.hpp:568:23: error: request for member ‘count’ in ‘(CD)(d)’, which is of non-class type ‘CD {aka int}’
    /usr/include/boost/chrono/duration.hpp:568:43: error: expected type-specifier before numeric constant
    /usr/include/boost/chrono/duration.hpp:568:43: error: expected ‘>’ before numeric constant
    /usr/include/boost/chrono/duration.hpp:568:43: error: expected ‘(’ before numeric constant
    /usr/include/boost/chrono/duration.hpp: In function ‘typename boost::disable_if<boost::chrono::detail::is_duration<Rep2>, typename boost::chrono::detail::duration_divide_result<boost::chrono::duration<Rep1, Period>, Rep2>::type>::type boost::chrono::operator/(const boost::chrono::duration<Rep1, Period>&, const Rep2&)’:
    /usr/include/boost/chrono/duration.hpp:595:56: error: expected unqualified-id before numeric constant
    /usr/include/boost/chrono/duration.hpp:596:36: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Rep, class Period> class boost::chrono::duration’
    /usr/include/boost/chrono/duration.hpp:596:36: error:   expected a type, got ‘13’
    /usr/include/boost/chrono/duration.hpp:596:40: error: invalid type in declaration before ‘;’ token
    /usr/include/boost/chrono/duration.hpp:598:23: error: request for member ‘count’ in ‘(CD)(d)’, which is of non-class type ‘CD {aka int}’
    /usr/include/boost/chrono/duration.hpp:598:16: error: expected primary-expression before ‘(’ token
    /usr/include/boost/chrono/duration.hpp:598:23: error: request for member ‘count’ in ‘(CD)(d)’, which is of non-class type ‘CD {aka int}’
    /usr/include/boost/chrono/duration.hpp:598:43: error: expected type-specifier before numeric constant
    /usr/include/boost/chrono/duration.hpp:598:43: error: expected ‘>’ before numeric constant
    /usr/include/boost/chrono/duration.hpp:598:43: error: expected ‘(’ before numeric constant
    /usr/include/boost/chrono/duration.hpp: In function ‘typename boost::disable_if<boost::chrono::detail::is_duration<Rep2>, typename boost::chrono::detail::duration_modulo_result<boost::chrono::duration<Rep1, Period>, Rep2>::type>::type boost::chrono::operator%(const boost::chrono::duration<Rep1, Period>&, const Rep2&)’:
    /usr/include/boost/chrono/duration.hpp:636:56: error: expected unqualified-id before numeric constant
    /usr/include/boost/chrono/duration.hpp:637:36: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Rep, class Period> class boost::chrono::duration’
    /usr/include/boost/chrono/duration.hpp:637:36: error:   expected a type, got ‘13’
    /usr/include/boost/chrono/duration.hpp:637:40: error: invalid type in declaration before ‘;’ token
    /usr/include/boost/chrono/duration.hpp:639:23: error: request for member ‘count’ in ‘(CD)(d)’, which is of non-class type ‘CD {aka int}’
    /usr/include/boost/chrono/duration.hpp:639:16: error: expected primary-expression before ‘(’ token
    /usr/include/boost/chrono/duration.hpp:639:23: error: request for member ‘count’ in ‘(CD)(d)’, which is of non-class type ‘CD {aka int}’
    /usr/include/boost/chrono/duration.hpp:639:43: error: expected type-specifier before numeric constant
    /usr/include/boost/chrono/duration.hpp:639:43: error: expected ‘>’ before numeric constant
    /usr/include/boost/chrono/duration.hpp:639:43: error: expected ‘(’ before numeric constant

That's probably because of `#define CR 13` in httpd.h and `typedef typename common_type<Rep1, Rep2>::type CR` in duration.hpp.

Also after

    # sed -e 's/\bCR\b/CRRRRR/' -i.orig /usr/include/boost/chrono/duration.hpp

same test.cpp can be built successufully.

Apache version:
ii  apache2                                         2.2.22-13

-- 
Regards,
Kirill

-- System Information:
Debian Release: 7.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-3-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=ru_RU.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libboost1.50-dev depends on:
ii  libc6                               2.17-0experimental2
ii  libgcc1                             1:4.7.2-5
ii  libicu48                            4.8.1.1-11
ii  libstdc++6                          4.7.2-5
ii  libstdc++6-4.4-dev [libstdc++-dev]  4.4.7-3
ii  libstdc++6-4.7-dev [libstdc++-dev]  4.7.2-5

libboost1.50-dev recommends no packages.

Versions of packages libboost1.50-dev suggests:
ii  default-jdk                       1:1.6-47
ii  docbook-xml                       4.5-7.1
ii  docbook-xsl                       1.76.1+dfsg-1
pn  doxygen                           <none>
pn  fop                               <none>
ii  libboost-chrono1.50-dev           1.50.0-2
ii  libboost-date-time1.50-dev        1.50.0-2
ii  libboost-exception1.50-dev        1.50.0-2
ii  libboost-filesystem1.50-dev       1.50.0-2
ii  libboost-graph-parallel1.50-dev   1.50.0-2
ii  libboost-graph1.50-dev            1.50.0-2
ii  libboost-iostreams1.50-dev        1.50.0-2
ii  libboost-locale1.50-dev           1.50.0-2
ii  libboost-math1.50-dev             1.50.0-2
ii  libboost-mpi1.50-dev              1.50.0-2
ii  libboost-program-options1.50-dev  1.50.0-2
ii  libboost-python1.50-dev           1.50.0-2
ii  libboost-random1.50-dev           1.50.0-2
ii  libboost-regex1.50-dev            1.50.0-2
ii  libboost-serialization1.50-dev    1.50.0-2
ii  libboost-signals1.50-dev          1.50.0-2
ii  libboost-system1.50-dev           1.50.0-2
ii  libboost-test1.50-dev             1.50.0-2
ii  libboost-thread1.50-dev           1.50.0-2
ii  libboost-timer1.50-dev            1.50.0-2
ii  libboost-wave1.50-dev             1.50.0-2
pn  libboost1.50-doc                  <none>
ii  xsltproc                          1.1.26-14

-- no debconf information



More information about the pkg-boost-devel mailing list