[Boost-bugs] [Boost C++ Libraries] #13472: Bad feature detection for nvcc and clang as a host compiler.

Subject: [Boost-bugs] [Boost C++ Libraries] #13472: Bad feature detection for nvcc and clang as a host compiler.
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2018-03-09 12:14:21


#13472: Bad feature detection for nvcc and clang as a host compiler.
-------------------------------------------+--------------------------
 Reporter: Jakub Klener <jakub.klener@…> | Owner: John Maddock
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: config
  Version: Boost 1.58.0 | Severity: Problem
 Keywords: clang nvcc |
-------------------------------------------+--------------------------
 Boost feature detection is wrong if the source is compiled with nvcc and
 clang as host compiler.

 For example, move semantics can't be used with c++11 enabled.

 {{{
 #include <utility>

 #include <boost/variant.hpp>

 class TestClass
 {
 public:
     TestClass() = default;
     TestClass(const TestClass &) = delete;
     TestClass(TestClass &&) = default;
 };

 int main() {
     TestClass c1;
     boost::variant<TestClass> v{std::move(c1)};
     return 0;
 }
 }}}
 When compiled with (ubuntu 16.04, gcc 5.4, CUDA 9.1):
 {{{
 nvcc temp.cu -o temp -ccbin=/usr/bin/gcc -std=c++11
 }}}
 everything works well, but
 {{{
 nvcc temp.cu -o temp -ccbin=/usr/bin/clang-4.0 -std=c++11
 }}}
 fails with the following:
 {{{
 /usr/include/boost/variant/detail/initializer.hpp(110): error: function
 "TestClass::TestClass(const TestClass &)"
 temp.cu(10): here cannot be referenced -- it is a deleted function
           detected during:
             instantiation of "int
 boost::detail::variant::make_initializer_node::apply<BaseIndexPair,
 Iterator>::initializer_node::initialize(void *,
 boost::detail::variant::make_initializer_node::apply<BaseIndexPair,
 Iterator>::initializer_node::param_T) [with
 BaseIndexPair=boost::mpl::pair<boost::detail::variant::initializer_root,
 mpl_::int_<0>>,
 Iterator=boost::mpl::l_iter<boost::mpl::list1<TestClass>>]"
 /usr/include/boost/variant/variant.hpp(1538): here
             instantiation of "void boost::variant<T0_, T1, T2, T3, T4, T5,
 T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18,
 T19>::convert_construct(T &, int, mpl_::false_) [with T0_=TestClass,
 T1=boost::detail::variant::void_, T2=boost::detail::variant::void_,
 T3=boost::detail::variant::void_, T4=boost::detail::variant::void_,
 T5=boost::detail::variant::void_, T6=boost::detail::variant::void_,
 T7=boost::detail::variant::void_, T8=boost::detail::variant::void_,
 T9=boost::detail::variant::void_, T10=boost::detail::variant::void_,
 T11=boost::detail::variant::void_, T12=boost::detail::variant::void_,
 T13=boost::detail::variant::void_, T14=boost::detail::variant::void_,
 T15=boost::detail::variant::void_, T16=boost::detail::variant::void_,
 T17=boost::detail::variant::void_, T18=boost::detail::variant::void_,
 T19=boost::detail::variant::void_, T=const TestClass]"
 /usr/include/boost/variant/variant.hpp(1683): here
             instantiation of "boost::variant<T0_, T1, T2, T3, T4, T5, T6,
 T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18,
 T19>::variant(const T &) [with T0_=TestClass,
 T1=boost::detail::variant::void_, T2=boost::detail::variant::void_,
 T3=boost::detail::variant::void_, T4=boost::detail::variant::void_,
 T5=boost::detail::variant::void_, T6=boost::detail::variant::void_,
 T7=boost::detail::variant::void_, T8=boost::detail::variant::void_,
 T9=boost::detail::variant::void_, T10=boost::detail::variant::void_,
 T11=boost::detail::variant::void_, T12=boost::detail::variant::void_,
 T13=boost::detail::variant::void_, T14=boost::detail::variant::void_,
 T15=boost::detail::variant::void_, T16=boost::detail::variant::void_,
 T17=boost::detail::variant::void_, T18=boost::detail::variant::void_,
 T19=boost::detail::variant::void_, T=TestClass]"
 temp.cu(17): here

 1 error detected in the compilation of
 "/tmp/tmpxft_00005819_00000000-8_temp.cpp1.ii".
 }}}
 If I change `boost/config/select_compiler_config.hpp`
 {{{
 42 #elif defined __clang__ && !defined(__CUDACC__)
 }}}
 to
 {{{
 42 #elif defined __clang__
 }}}
 everything works well.

-- 
Ticket URL: <https://svn.boost.org/trac10/ticket/13472>
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-03-09 12:18:11 UTC