Re: [Boost-bugs] [Boost C++ Libraries] #7260: Header order conflicts between Thread and ASIO

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #7260: Header order conflicts between Thread and ASIO
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2012-09-18 17:09:09


#7260: Header order conflicts between Thread and ASIO
---------------------------------------+------------------------------------
  Reporter: joshuadavidson@… | Owner:
      Type: Bugs | Status: new
 Milestone: To Be Determined | Component: None
   Version: Boost 1.52.0 | Severity: Problem
Resolution: | Keywords:
---------------------------------------+------------------------------------
Description changed by viboes:

Old description:

> This problem is still present as of 1.50. Link to discussion:
> http://lists.boost.org/boost-users/2012/06/74823.php
>
> Consider this following simple app:
>
> #include <boost/thread/thread.hpp>
>
> #include <boost/asio.hpp>
>
> #include <boost/thread/recursive_mutex.hpp>
>

>

>
> int main() {
>

>
> return 0;
>
> }
>

>
> If you try to build that on Windows, you receive the following error:
>
> In file included from
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/recursive_mutex.hpp:14:0,
>
> from
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/recursive_mutex.hpp:14,
>
> from build.cpp:3:
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
> In member function 'void
> boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::lock()':
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:52:21:
> error: '_InterlockedExchange' is not a member of 'boost::detail'
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
> In member function 'void
> boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::unlock()':
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:71:21:
> error: '_InterlockedExchange' is not a member of 'boost::detail'
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
> In member function 'bool
> boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::try_basic_lock(long
> int)':
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:91:21:
> error: '_InterlockedExchange' is not a member of 'boost::detail'
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
> In member function 'bool
> boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::try_timed_lock(long
> int, const boost::system_time&)':
>
> c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:102:21:
> error: '_InterlockedExchange' is not a member of 'boost::detail'
>

>

>

>
> If asio.hpp is moved ahead of the thread headers, the error goes away.
> We’ve been trying to dictate #include order to work around this problem,
> but it keeps cropping up.

New description:

 This problem is still present as of 1.50. Link to discussion:
 http://lists.boost.org/boost-users/2012/06/74823.php

 Consider this following simple app:


 {{{
 #include <boost/thread/thread.hpp>

 #include <boost/asio.hpp>

 #include <boost/thread/recursive_mutex.hpp>





 int main() {



                 return 0;

 }
 }}}




 If you try to build that on Windows, you receive the following error:


 {{{
 In file included from
 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/recursive_mutex.hpp:14:0,

                  from
 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/recursive_mutex.hpp:14,

                  from build.cpp:3:

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
 In member function 'void
 boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::lock()':

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:52:21:
 error: '_InterlockedExchange' is not a member of 'boost::detail'

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
 In member function 'void
 boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::unlock()':

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:71:21:
 error: '_InterlockedExchange' is not a member of 'boost::detail'

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
 In member function 'bool
 boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::try_basic_lock(long
 int)':

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:91:21:
 error: '_InterlockedExchange' is not a member of 'boost::detail'

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:
 In member function 'bool
 boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::try_timed_lock(long
 int, const boost::system_time&)':

 c:/mingw/lib/gcc/../../x86_64-w64-mingw32/include/boost/thread/win32/basic_recursive_mutex.hpp:102:21:
 error: '_InterlockedExchange' is not a member of 'boost::detail'
 }}}


 If asio.hpp is moved ahead of the thread headers, the error goes away.
 We’ve been trying to dictate #include order to work around this problem,
 but it keeps cropping up.

--
-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/7260#comment:1>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:10 UTC