diff options
Diffstat (limited to 'odb/details')
-rw-r--r-- | odb/details/function-wrapper.hxx | 5 | ||||
-rw-r--r-- | odb/details/function-wrapper.ixx | 10 |
2 files changed, 15 insertions, 0 deletions
diff --git a/odb/details/function-wrapper.hxx b/odb/details/function-wrapper.hxx index 3a8ebfc..165df18 100644 --- a/odb/details/function-wrapper.hxx +++ b/odb/details/function-wrapper.hxx @@ -59,6 +59,11 @@ namespace odb void swap (function_wrapper<F>&); + // Cleanly cast to an incompatible function type. + // + template <typename R> R + cast () const; + // Conversion to bool. // public: diff --git a/odb/details/function-wrapper.ixx b/odb/details/function-wrapper.ixx index d73d578..9ec19ec 100644 --- a/odb/details/function-wrapper.ixx +++ b/odb/details/function-wrapper.ixx @@ -36,5 +36,15 @@ namespace odb swap (const_cast<function_wrapper<F>&> (x)); return *this; } + + template <typename F> + template <typename R> + inline R function_wrapper<F>:: + cast () const + { + union { F* f; R r; } r; + r.f = function; + return r.r; + } } } |