// file : odb/lazy-ptr-impl.txx // copyright : Copyright (c) 2009-2015 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file namespace odb { // // lazy_ptr_base // template void lazy_ptr_base:: free (void* p) { delete static_cast (p); } template void* lazy_ptr_base:: copy (const void* p) { return new T (*static_cast (p)); } template typename object_traits::pointer_type lazy_ptr_base:: loader (database_type& db, const typename object_traits::id_type& id) { // Compiler error pointing here? Perhaps you did not include // ? // return static_cast (db).template load< typename object_traits::object_type> (id); } // // lazy_ptr_impl // template template inline typename object_traits::pointer_type lazy_ptr_impl:: load (bool reset) { typedef typename object_traits::id_type id_type; typedef typename object_traits::pointer_type pointer_type; typedef pointer_type (*loader_type) (database_type&, const id_type&); loader_type loader (reinterpret_cast (loader_)); const id_type& id (*static_cast (id_)); pointer_type p (loader (*db_, id)); if (reset) reset_id (); // If you get a compile error pointing here, then you most likely // used a wrong type as a template argument in the load() call. // return p; } }