aboutsummaryrefslogtreecommitdiff
path: root/odb/object-result.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-02-28 16:16:05 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-02-28 16:20:18 +0200
commit35a2460893ddfd006d9d85dcc6ab7a01c1ab9848 (patch)
tree0fef3a192febb9249c45a2d21bec6f9aef7c286a /odb/object-result.hxx
parent43b3c92c5dae2d851f45fbe04f1c9ac6d9a933f4 (diff)
Handle C++11 movable object pointers such as std::unique_ptr
Diffstat (limited to 'odb/object-result.hxx')
-rw-r--r--odb/object-result.hxx32
1 files changed, 32 insertions, 0 deletions
diff --git a/odb/object-result.hxx b/odb/object-result.hxx
index a2cd92d..759c9f5 100644
--- a/odb/object-result.hxx
+++ b/odb/object-result.hxx
@@ -9,11 +9,13 @@
#include <cstddef> // std::ptrdiff_t, std::size_t
#include <iterator> // iterator categories
+#include <utility> // std::move
#include <odb/forward.hxx>
#include <odb/result.hxx>
#include <odb/pointer-traits.hxx>
+#include <odb/details/config.hxx> // ODB_CXX11
#include <odb/details/shared-ptr.hxx>
namespace odb
@@ -132,12 +134,27 @@ namespace odb
size () = 0;
protected:
+#ifdef ODB_CXX11
+ void
+ current (pointer_type& p)
+ {
+ current_ = std::move (p);
+ guard_.reset (current_);
+ }
+
+ void
+ current (pointer_type&& p)
+ {
+ current (p);
+ }
+#else
void
current (pointer_type p)
{
current_ = p;
guard_.reset (current_);
}
+#endif
bool begin_;
bool end_;
@@ -231,12 +248,27 @@ namespace odb
size () = 0;
protected:
+#ifdef ODB_CXX11
+ void
+ current (pointer_type& p)
+ {
+ current_ = std::move (p);
+ guard_.reset (current_);
+ }
+
+ void
+ current (pointer_type&& p)
+ {
+ current (p);
+ }
+#else
void
current (pointer_type p)
{
current_ = p;
guard_.reset (current_);
}
+#endif
bool begin_;
bool end_;