aboutsummaryrefslogtreecommitdiff
path: root/tests/optional
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-05-19 21:19:58 +0300
committerBoris Kolpackov <boris@codesynthesis.com>2020-06-26 16:33:27 +0200
commit82b9af71dd5aa3ad6fee808e91e9b1024ebaeafb (patch)
treeaa37c5235b00d5126a3f841b82247b419dc5c46a /tests/optional
parentaf85a3694788ca5c9e5a9e6f525e4934ed5eb64c (diff)
Improve std::optional to better deal with lack of copy/move constructors
Diffstat (limited to 'tests/optional')
-rw-r--r--tests/optional/buildfile6
-rw-r--r--tests/optional/driver.cxx43
2 files changed, 49 insertions, 0 deletions
diff --git a/tests/optional/buildfile b/tests/optional/buildfile
new file mode 100644
index 0000000..68188d7
--- /dev/null
+++ b/tests/optional/buildfile
@@ -0,0 +1,6 @@
+# file : tests/optional/buildfile
+# license : MIT; see accompanying LICENSE file
+
+import libs = libbutl%lib{butl}
+
+exe{driver}: {hxx cxx}{*} $libs
diff --git a/tests/optional/driver.cxx b/tests/optional/driver.cxx
new file mode 100644
index 0000000..5d72f08
--- /dev/null
+++ b/tests/optional/driver.cxx
@@ -0,0 +1,43 @@
+// file : tests/optional/driver.cxx -*- C++ -*-
+// license : MIT; see accompanying LICENSE file
+
+#include <cassert>
+
+#ifndef __cpp_lib_modules_ts
+#include <vector>
+#include <utility> // move()
+#endif
+
+// Other includes.
+
+#ifdef __cpp_modules_ts
+#ifdef __cpp_lib_modules_ts
+import std.core;
+#endif
+import butl.optional;
+#else
+#include <libbutl/optional.mxx>
+#endif
+
+using namespace std;
+
+struct move_only
+{
+ move_only () = default;
+
+ move_only (move_only&&) = default;
+ move_only& operator= (move_only&&) = default;
+
+ move_only (const move_only&) = delete;
+ move_only& operator= (const move_only&) = delete;
+};
+
+int
+main ()
+{
+ using butl::optional;
+
+ optional<move_only> r;
+ vector<optional<move_only>> rs;
+ rs.emplace_back (move (r));
+}