Skip to content

Commit 66cdd90

Browse files
committed
Kept boost:optional unchanged and made std::experimental::optional and alternative to std::optional
1 parent 4b8c4f7 commit 66cdd90

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#ifdef __has_include
1717
#if __cplusplus > 201402 && __has_include(<optional>)
1818
#define MODERN_SQLITE_STD_OPTIONAL_SUPPORT
19+
#elif __has_include(<experimental/optional>)
20+
#ifdef _MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT
21+
#define MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT
22+
#endif
1923
#endif
2024
#endif
2125

@@ -27,7 +31,9 @@
2731

2832
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
2933
#include <optional>
30-
#elif _MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT && __has_include(<experimental/optional>)
34+
#endif
35+
36+
#ifdef MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT
3137
#include <experimental/optional>
3238
#endif
3339

@@ -239,9 +245,16 @@ namespace sqlite {
239245
friend database_binder& operator <<(database_binder& db, const std::u16string& txt);
240246

241247

242-
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
243-
template <typename OptionalT> friend database_binder& operator <<(database_binder& db, const std::optional<OptionalT>& val);
244-
template <typename OptionalT> friend void get_col_from_db(database_binder& db, int inx, std::optional<OptionalT>& o);
248+
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT || MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT
249+
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
250+
template<class T>
251+
using optional = std::optional<T>;
252+
#else
253+
template<class T>
254+
using optional = std::experimental::optional<T>;
255+
#endif
256+
template <typename OptionalT> friend database_binder& operator <<(database_binder& db, const optional<OptionalT>& val);
257+
template <typename OptionalT> friend void get_col_from_db(database_binder& db, int inx, optional<OptionalT>& o);
245258
#endif
246259

247260
#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
@@ -791,22 +804,22 @@ namespace sqlite {
791804
}
792805

793806
// std::optional support for NULL values
794-
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
795-
template <typename OptionalT> inline database_binder& operator <<(database_binder& db, const std::optional<OptionalT>& val) {
807+
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT || MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT
808+
template <typename OptionalT> inline database_binder& operator <<(database_binder& db, const optional<OptionalT>& val) {
796809
if(val) {
797810
return db << std::move(*val);
798811
} else {
799812
return db << nullptr;
800813
}
801814
}
802-
template <typename OptionalT> inline void store_result_in_db(sqlite3_context* db, const std::optional<OptionalT>& val) {
815+
template <typename OptionalT> inline void store_result_in_db(sqlite3_context* db, const optional<OptionalT>& val) {
803816
if(val) {
804817
store_result_in_db(db, *val);
805818
}
806819
sqlite3_result_null(db);
807820
}
808821

809-
template <typename OptionalT> inline void get_col_from_db(database_binder& db, int inx, std::optional<OptionalT>& o) {
822+
template <typename OptionalT> inline void get_col_from_db(database_binder& db, int inx, optional<OptionalT>& o) {
810823
if(sqlite3_column_type(db._stmt.get(), inx) == SQLITE_NULL) {
811824
o.reset();
812825
} else {
@@ -815,7 +828,7 @@ namespace sqlite {
815828
o = std::move(v);
816829
}
817830
}
818-
template <typename OptionalT> inline void get_val_from_db(sqlite3_value *value, std::optional<OptionalT>& o) {
831+
template <typename OptionalT> inline void get_val_from_db(sqlite3_value *value, optional<OptionalT>& o) {
819832
if(sqlite3_value_type(value) == SQLITE_NULL) {
820833
o.reset();
821834
} else {

0 commit comments

Comments
 (0)