summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp0x/initlist10.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/initlist10.C')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist10.C53
1 files changed, 53 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist10.C b/gcc/testsuite/g++.dg/cpp0x/initlist10.C
new file mode 100644
index 000000000..bf955f513
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist10.C
@@ -0,0 +1,53 @@
+// PR c++/38380
+// { dg-options "-std=gnu++0x" }
+
+namespace std
+{
+ struct atomic_bool
+ {
+ bool _M_i;
+
+ atomic_bool() = default;
+ ~atomic_bool() = default;
+ atomic_bool(const atomic_bool&) = delete;
+ atomic_bool& operator=(const atomic_bool&) = delete;
+
+ explicit atomic_bool(bool __i) { _M_i = __i; }
+
+ operator bool() const volatile
+ { return true; }
+ };
+}
+
+namespace __gnu_test
+{
+ struct direct_list_initializable
+ {
+ template<typename _Ttype, typename _Tvalue>
+ void
+ operator()()
+ {
+ struct _Concept
+ {
+ void __constraint()
+ {
+ _Ttype __v1 = { }; // default ctor
+ _Ttype __v2 { __a }; // single-argument ctor
+ }
+
+ _Tvalue __a;
+ };
+
+ void (_Concept::*__x)() __attribute__((unused))
+ = &_Concept::__constraint;
+ }
+ };
+}
+
+int main()
+{
+ __gnu_test::direct_list_initializable test;
+
+ test.operator()<std::atomic_bool, bool>();
+ return 0;
+}