Home | History | Annotate | Download | only in atomics.types.operations.req
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <atomic>
     11 
     12 // template <class T>
     13 //     bool
     14 //     atomic_is_lock_free(const volatile atomic<T>* obj);
     15 //
     16 // template <class T>
     17 //     bool
     18 //     atomic_is_lock_free(const atomic<T>* obj);
     19 
     20 #include <atomic>
     21 
     22 template <class T>
     23 void
     24 test()
     25 {
     26     typedef std::atomic<T> A;
     27     const A ct;
     28     bool b1 = std::atomic_is_lock_free(&ct);
     29     const volatile A cvt;
     30     bool b2 = std::atomic_is_lock_free(&cvt);
     31 }
     32 
     33 struct A
     34 {
     35     char _[4];
     36 };
     37 
     38 int main()
     39 {
     40     test<A>();
     41     test<char>();
     42     test<signed char>();
     43     test<unsigned char>();
     44     test<short>();
     45     test<unsigned short>();
     46     test<int>();
     47     test<unsigned int>();
     48     test<long>();
     49     test<unsigned long>();
     50     test<long long>();
     51     test<unsigned long long>();
     52     test<wchar_t>();
     53 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     54     test<char16_t>();
     55     test<char32_t>();
     56 #endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
     57     test<int*>();
     58     test<const int*>();
     59 }
     60