diff options
author | Michael Shepanski <michael@codesynthesis.com> | 2014-10-30 15:21:32 +1100 |
---|---|---|
committer | Michael Shepanski <michael@codesynthesis.com> | 2014-10-31 08:39:49 +1100 |
commit | 1f217e38f7507758da1d33d46e675e801621aa38 (patch) | |
tree | bad382ee315a820ec08bd2a83eaece12ac8169e3 /odb/details/function-wrapper.ixx | |
parent | 31af5a488f2be9f4059e159492d4fe62f25a895a (diff) |
Allow lambdas & std::functions as query factories with C++-98 builds of libodb
Diffstat (limited to 'odb/details/function-wrapper.ixx')
-rw-r--r-- | odb/details/function-wrapper.ixx | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/odb/details/function-wrapper.ixx b/odb/details/function-wrapper.ixx new file mode 100644 index 0000000..58ede04 --- /dev/null +++ b/odb/details/function-wrapper.ixx @@ -0,0 +1,47 @@ +// file : odb/details/function-wrapper.ixx +// copyright : Copyright (c) 2009-2014 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +namespace odb +{ + namespace details + { + template <typename F> + inline function_wrapper<F>:: + ~function_wrapper () + { + if (deleter != 0) + deleter (std_function); + } + + template <typename F> + inline function_wrapper<F>:: + function_wrapper (F* f) + : function (f), deleter (0), std_function (0) + { + } + + template <typename F> + inline function_wrapper<F>:: + function_wrapper (const function_wrapper<F>& x) + : function (0), deleter (0), std_function (0) + { + swap (const_cast<function_wrapper<F>&> (x)); + } + + template <typename F> + inline function_wrapper<F>& function_wrapper<F>:: + operator= (const function_wrapper<F>& x) + { + swap (const_cast<function_wrapper<F>&> (x)); + return *this; + } + + template <typename F> + inline function_wrapper<F>:: + operator bool_convertible () const + { + return function != 0 ? &function_wrapper<F>::true_value : 0; + } + } +} |