Skip to content

Commit ece800f

Browse files
committed
fix gcc6.1 overloading rules
1 parent 30ec3e5 commit ece800f

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)