@@ -223,19 +223,19 @@ namespace sqlite {
223
223
template <typename T> friend database_binder& operator <<(database_binder& db, const std::unique_ptr<T>& val);
224
224
template <typename T> friend void get_col_from_db (database_binder& db, int inx, std::unique_ptr<T>& val);
225
225
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);
239
239
240
240
241
241
#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
@@ -363,6 +363,7 @@ namespace sqlite {
363
363
Values&&... values
364
364
) {
365
365
nth_argument_type<Function, sizeof ...(Values)> value{};
366
+ get_col_from_db (db, sizeof ...(Values), value);
366
367
367
368
run<Function>(db, function, std::forward<Values>(values)..., std::move (value));
368
369
}
0 commit comments