[Boost-bugs] [Boost C++ Libraries] #13450: boost_beast tests are failing on Windows with Intel's compiler due to incorrect boost_asio config.hpp file

Subject: [Boost-bugs] [Boost C++ Libraries] #13450: boost_beast tests are failing on Windows with Intel's compiler due to incorrect boost_asio config.hpp file
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2018-02-16 09:25:57


#13450: boost_beast tests are failing on Windows with Intel's compiler due to
incorrect boost_asio config.hpp file
-------------------------------------------+----------------------------
 Reporter: Ivan Kelarev <ivan.kelarev@…> | Owner: chris_kohlhoff
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: asio
  Version: Boost 1.66.0 | Severity: Problem
 Keywords: |
-------------------------------------------+----------------------------
 {{{
 $ cd boost_1_66_0/libs/beast/test/beast
 $ C:/Users/ikelarev/test5/boost_1_66_0/b2 toolset=intel-18_0-vc14.1
 address-model=64 --hash --disable-icu --reconfigure -d+1 -d+2 cflags=" "
 core

 ...

     icl
 @"..\..\..\..\bin.v2\libs\beast\test\beast\core.test\907320e2b6757701b88c115bc51c431a\core.obj.rsp"

 ...

 ../../../../boost/beast/core/detail/bind_handler.hpp(109): error:
 namespace "boost::asio" has no member "associated_allocator_t"
           boost::asio::associated_allocator_t<Handler>;
                        ^

 ../../../../boost/beast/core/detail/bind_handler.hpp(109): error: expected
 a ";"
           boost::asio::associated_allocator_t<Handler>;
                                              ^

 ../../../../boost/beast/core/impl/buffered_read_stream.ipp(53): error:
 namespace "boost::asio" has no member "associated_allocator_t"
           boost::asio::associated_allocator_t<Handler>;
                        ^

 ../../../../boost/beast/core/impl/buffered_read_stream.ipp(53): error:
 expected a ";"
           boost::asio::associated_allocator_t<Handler>;
                                              ^

 ../../../../boost/beast/core/impl/buffered_read_stream.ipp(62): error:
 namespace "boost::asio" has no member "associated_executor_t"
           boost::asio::associated_executor_t<Handler, decltype(
                        ^

 compilation aborted for core.cpp (code 4)
 }}}

 associated_allocator_t is defined in boost/asio/associated_allocator.hpp
 header file:

 {{{
 #if defined(BOOST_ASIO_HAS_ALIAS_TEMPLATES)

 template <typename T, typename Allocator = std::allocator<void> >
 using associated_allocator_t
   = typename associated_allocator<T, Allocator>::type;

 #endif // defined(BOOST_ASIO_HAS_ALIAS_TEMPLATES)
 }}}

 This means that associated_allocator_t will not be defined if
 BOOST_ASIO_HAS_ALIAS_TEMPLATES macro is not defined. This macro definition
 is arranged in boost/asio/detail/config.hpp header file:

 {{{
 // Support alias templates on compilers known to allow it.
 #if !defined(BOOST_ASIO_HAS_ALIAS_TEMPLATES)
 # if !defined(BOOST_ASIO_DISABLE_ALIAS_TEMPLATES)
 ...
 # if defined(BOOST_ASIO_MSVC)
 # if (_MSC_VER >= 1900)
 # define BOOST_ASIO_HAS_ALIAS_TEMPLATES 1
 # endif // (_MSC_VER >= 1900)
 # endif // defined(BOOST_ASIO_MSVC)
 # endif // !defined(BOOST_ASIO_DISABLE_ALIAS_TEMPLATES)
 #endif // !defined(BOOST_ASIO_HAS_ALIAS_TEMPLATES)
 }}}

 This means that BOOST_ASIO_MSVC macro is required for
 BOOST_ASIO_HAS_ALIAS_TEMPLATES definition. BOOST_ASIO_MSVC definition is
 arranged in the same file before.

 {{{
 // Microsoft Visual C++ detection.
 #if !defined(BOOST_ASIO_MSVC)
 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
 # define BOOST_ASIO_MSVC BOOST_MSVC
 # elif defined(_MSC_VER) && (defined(__INTELLISENSE__) \
       || (!defined(__MWERKS__) && !defined(__EDG_VERSION__)))
 # define BOOST_ASIO_MSVC _MSC_VER
 # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
 #endif // defined(BOOST_ASIO_MSVC)
 }}}

 It's obvious from the code that BOOST_ASIO_HAS_BOOST_CONFIG and BOOST_MSVC
 macros are required for BOOST_ASIO_MSVC macro definition.
 BOOST_ASIO_HAS_BOOST_CONFIG macro is actually defined but BOOST_MSVC macro
 is defined only for Microsoft cl compiler. For Intel's icl compiler
 BOOST_MSVC macro is not defined and BOOST_INTEL macro is defined instead.

 As a result BOOST_ASIO_MSVC and BOOST_ASIO_HAS_ALIAS_TEMPLATES macros will
 not be defined. And finally 'namespace "boost::asio" has no member
 "associated_allocator_t"' error appears.

 One of possible solutions is to add this code into
 boost/asio/detail/config.hpp file:

 {{{
  #if !defined(BOOST_ASIO_MSVC)
  # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
  # define BOOST_ASIO_MSVC BOOST_MSVC
 +# elif defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_INTEL)
 +# define BOOST_ASIO_MSVC BOOST_INTEL
  # elif defined(_MSC_VER) && (defined(__INTELLISENSE__) \
        || (!defined(__MWERKS__) && !defined(__EDG_VERSION__)))
  # define BOOST_ASIO_MSVC _MSC_VER
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac10/ticket/13450>
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 : 2018-02-16 09:32:17 UTC