[LLVMbugs] [Bug 18097] New: atomic<> of trivially copyable class is rejected

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sat Nov 30 01:15:11 PST 2013


http://llvm.org/bugs/show_bug.cgi?id=18097

            Bug ID: 18097
           Summary: atomic<> of trivially copyable class is rejected
           Product: libc++
           Version: 3.2
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: hhinnant at apple.com
          Reporter: tim at klingt.org
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

the following code does not compile (taken from
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-May/029757.html):

--
#include <atomic>
#include <type_traits>

struct A
{                                                                               
    int i_;                                                                     

    A(int i) : i_(i) {}                                                         
};                                                                              

static_assert(std::is_trivially_copyable<A>::value, "");                        

int                                                                             
main()                                                                          
{                                                                               
    std::atomic<A> q(A(1));                                                     
}                                                                               
--

gives:
--
/usr/include/c++/v1/atomic:632:58: error: no viable conversion from 'A' to
'_Atomic(A)'
    _LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {}
                                                         ^    ~~~
/usr/include/c++/v1/atomic:736:51: note: in instantiation of member function
'std::__1::__atomic_base<A, false>::__atomic_base' requested here
    _LIBCPP_CONSTEXPR atomic(_Tp __d) _NOEXCEPT : __base(__d) {}
                                                  ^
x.cpp:16:20: note: in instantiation of member function
'std::__1::atomic<A>::atomic' requested here
    std::atomic<A> q(A(1));
--

this is a showstopper for compiling boost.lockfree with std::atomic on clang.

more discussions on this issue:
http://thread.gmane.org/gmane.comp.compilers.clang.devel/29496

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20131130/9ca487c8/attachment.html>


More information about the llvm-bugs mailing list