1 // PR c++/38380
2 // { dg-do compile { target c++11 } }
3 
4 namespace std
5 {
6  struct atomic_bool
7   {
8     bool _M_i;
9 
10     atomic_bool() = default;
11     ~atomic_bool() = default;
12     atomic_bool(const atomic_bool&) = delete;
13     atomic_bool& operator=(const atomic_bool&) = delete;
14 
atomic_boolatomic_bool15     explicit atomic_bool(bool __i) { _M_i = __i; }
16 
17     operator bool() const volatile
18     { return true; }
19   };
20 }
21 
22 namespace __gnu_test
23 {
24   struct direct_list_initializable
25   {
26     template<typename _Ttype, typename _Tvalue>
27       void
operatordirect_list_initializable28       operator()()
29       {
30         struct _Concept
31         {
32           void __constraint()
33           {
34             _Ttype __v1 = { }; // default ctor
35             _Ttype __v2 { __a };  // single-argument ctor
36           }
37 
38           _Tvalue __a;
39         };
40 
41         void (_Concept::*__x)() __attribute__((unused))
42           = &_Concept::__constraint;
43       }
44   };
45 }
46 
main()47 int main()
48 {
49   __gnu_test::direct_list_initializable test;
50 
51   test.operator()<std::atomic_bool, bool>();
52   return 0;
53 }
54