Re: [Boost-bugs] [Boost C++ Libraries] #11897: Compile failure in type_traits_detail::mp_valid_impl with CUDA 7.0

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #11897: Compile failure in type_traits_detail::mp_valid_impl with CUDA 7.0
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2016-01-11 14:57:23


#11897: Compile failure in type_traits_detail::mp_valid_impl with CUDA 7.0
-------------------------------+-------------------------
  Reporter: a.grund@… | Owner: johnmaddock
      Type: Bugs | Status: new
 Milestone: To Be Determined | Component: type_traits
   Version: Boost 1.60.0 | Severity: Showstopper
Resolution: | Keywords:
-------------------------------+-------------------------

Comment (by Alex Grund <a.grund@…>):

 Yes, but the implementation of `BOOST_WORKAROUND` is:

 {{{
 # define BOOST_WORKAROUND(symbol, test) \
          ((symbol ## _WORKAROUND_GUARD + 0 == 0) && \
          (symbol != 0) && (1 % (( (symbol test) ) + 1)))
 }}}

 There is a check if that symbol evaluates to `0` causing the failure I
 described above. This is why `BOOST_WORKAROUND` cannot be used for this!

 So:[[BR]]
 1) Currently not. But similar uses of variadic templates will probably
 fail. Currently nothing else uses `mp_defer` (1.60) but other code in
 future versions may use that as well and run into the same bug.[[BR]]
 2) No because `BOOST_WORKAROUND` always evaluates to false for this. Prior
 to 7.5 the symbol is undefined causing the `(symbol != 0)` check to fail,
 and in >=7.5 the 2nd part of the check will fail.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/11897#comment:8>
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:19 UTC