@@ -223,19 +223,19 @@ namespace sqlite {
223223 template <typename T> friend database_binder& operator <<(database_binder& db, const std::unique_ptr<T>& val);
224224 template <typename T> friend void get_col_from_db (database_binder& db, int inx, std::unique_ptr<T>& val);
225225 template <typename T> friend T operator ++(database_binder& db, int );
226- // for nontemplate functions
227- friend database_binder& operator <<(database_binder& db, const int & val);
228- friend void get_col_from_db (database_binder& db, int inx, int & val);
229- friend database_binder& operator <<(database_binder& db, const sqlite_int64& val);
230- friend void get_col_from_db (database_binder& db, int inx, sqlite3_int64& i);
231- friend database_binder& operator <<(database_binder& db, const float & val);
232- friend void get_col_from_db (database_binder& db, int inx, float & f);
233- friend database_binder& operator <<(database_binder& db, const double & val);
234- friend void get_col_from_db (database_binder& db, int inx, double & d);
235- friend void get_col_from_db (database_binder& db, int inx, std::string & s);
236- friend database_binder& operator <<(database_binder& db, const std::string& txt);
237- friend void get_col_from_db (database_binder& db, int inx, std::u16string & w);
238- friend database_binder& operator <<(database_binder& db, const std::u16string& txt);
226+ // Overload instead of specializing function templates (http://www.gotw.ca/publications/mill17.htm)
227+ friend database_binder& operator <<(database_binder& db, const int & val);
228+ friend void get_col_from_db (database_binder& db, int inx, int & val);
229+ friend database_binder& operator <<(database_binder& db, const sqlite_int64& val);
230+ friend void get_col_from_db (database_binder& db, int inx, sqlite3_int64& i);
231+ friend database_binder& operator <<(database_binder& db, const float & val);
232+ friend void get_col_from_db (database_binder& db, int inx, float & f);
233+ friend database_binder& operator <<(database_binder& db, const double & val);
234+ friend void get_col_from_db (database_binder& db, int inx, double & d);
235+ friend void get_col_from_db (database_binder& db, int inx, std::string & s);
236+ friend database_binder& operator <<(database_binder& db, const std::string& txt);
237+ friend void get_col_from_db (database_binder& db, int inx, std::u16string & w);
238+ friend database_binder& operator <<(database_binder& db, const std::u16string& txt);
239239
240240
241241#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
@@ -363,6 +363,7 @@ namespace sqlite {
363363 Values&&... values
364364 ) {
365365 nth_argument_type<Function, sizeof ...(Values)> value{};
366+ get_col_from_db (db, sizeof ...(Values), value);
366367
367368 run<Function>(db, function, std::forward<Values>(values)..., std::move (value));
368369 }
0 commit comments