@@ -843,167 +843,171 @@ namespace sqlite_orm {
843
843
return {std::move (arg)};
844
844
}
845
845
846
- /* *
847
- * Cute operators for columns
848
- */
849
- template <class T , class R >
850
- internal::lesser_than_t <T, R> operator <(internal::expression_t <T> expr, R r) {
851
- return {std::move (expr.value ), std::move (r)};
852
- }
846
+ // Deliberately put operators for `expression_t` into the internal namespace
847
+ // to facilitate ADL (Argument Dependent Lookup)
848
+ namespace internal {
849
+ /* *
850
+ * Cute operators for columns
851
+ */
852
+ template <class T , class R >
853
+ lesser_than_t <T, R> operator <(expression_t <T> expr, R r) {
854
+ return {std::move (expr.value ), std::move (r)};
855
+ }
853
856
854
- template <class L , class T >
855
- internal:: lesser_than_t <L, T> operator <(L l, internal:: expression_t <T> expr) {
856
- return {std::move (l), std::move (expr.value )};
857
- }
857
+ template <class L , class T >
858
+ lesser_than_t <L, T> operator <(L l, expression_t <T> expr) {
859
+ return {std::move (l), std::move (expr.value )};
860
+ }
858
861
859
- template <class T , class R >
860
- internal:: lesser_or_equal_t <T, R> operator <=(internal:: expression_t <T> expr, R r) {
861
- return {std::move (expr.value ), std::move (r)};
862
- }
862
+ template <class T , class R >
863
+ lesser_or_equal_t <T, R> operator <=(expression_t <T> expr, R r) {
864
+ return {std::move (expr.value ), std::move (r)};
865
+ }
863
866
864
- template <class L , class T >
865
- internal:: lesser_or_equal_t <L, T> operator <=(L l, internal:: expression_t <T> expr) {
866
- return {std::move (l), std::move (expr.value )};
867
- }
867
+ template <class L , class T >
868
+ lesser_or_equal_t <L, T> operator <=(L l, expression_t <T> expr) {
869
+ return {std::move (l), std::move (expr.value )};
870
+ }
868
871
869
- template <class T , class R >
870
- internal:: greater_than_t <T, R> operator >(internal:: expression_t <T> expr, R r) {
871
- return {std::move (expr.value ), std::move (r)};
872
- }
872
+ template <class T , class R >
873
+ greater_than_t <T, R> operator >(expression_t <T> expr, R r) {
874
+ return {std::move (expr.value ), std::move (r)};
875
+ }
873
876
874
- template <class L , class T >
875
- internal:: greater_than_t <L, T> operator >(L l, internal:: expression_t <T> expr) {
876
- return {std::move (l), std::move (expr.value )};
877
- }
877
+ template <class L , class T >
878
+ greater_than_t <L, T> operator >(L l, expression_t <T> expr) {
879
+ return {std::move (l), std::move (expr.value )};
880
+ }
878
881
879
- template <class T , class R >
880
- internal:: greater_or_equal_t <T, R> operator >=(internal:: expression_t <T> expr, R r) {
881
- return {std::move (expr.value ), std::move (r)};
882
- }
882
+ template <class T , class R >
883
+ greater_or_equal_t <T, R> operator >=(expression_t <T> expr, R r) {
884
+ return {std::move (expr.value ), std::move (r)};
885
+ }
883
886
884
- template <class L , class T >
885
- internal:: greater_or_equal_t <L, T> operator >=(L l, internal:: expression_t <T> expr) {
886
- return {std::move (l), std::move (expr.value )};
887
- }
887
+ template <class L , class T >
888
+ greater_or_equal_t <L, T> operator >=(L l, expression_t <T> expr) {
889
+ return {std::move (l), std::move (expr.value )};
890
+ }
888
891
889
- template <class T , class R >
890
- internal:: is_equal_t <T, R> operator ==(internal:: expression_t <T> expr, R r) {
891
- return {std::move (expr.value ), std::move (r)};
892
- }
892
+ template <class T , class R >
893
+ is_equal_t <T, R> operator ==(expression_t <T> expr, R r) {
894
+ return {std::move (expr.value ), std::move (r)};
895
+ }
893
896
894
- template <class L , class T >
895
- internal:: is_equal_t <L, T> operator ==(L l, internal:: expression_t <T> expr) {
896
- return {std::move (l), std::move (expr.value )};
897
- }
897
+ template <class L , class T >
898
+ is_equal_t <L, T> operator ==(L l, expression_t <T> expr) {
899
+ return {std::move (l), std::move (expr.value )};
900
+ }
898
901
899
- template <class T , class R >
900
- internal:: is_not_equal_t <T, R> operator !=(internal:: expression_t <T> expr, R r) {
901
- return {std::move (expr.value ), std::move (r)};
902
- }
902
+ template <class T , class R >
903
+ is_not_equal_t <T, R> operator !=(expression_t <T> expr, R r) {
904
+ return {std::move (expr.value ), std::move (r)};
905
+ }
903
906
904
- template <class L , class T >
905
- internal:: is_not_equal_t <L, T> operator !=(L l, internal:: expression_t <T> expr) {
906
- return {std::move (l), std::move (expr.value )};
907
- }
907
+ template <class L , class T >
908
+ is_not_equal_t <L, T> operator !=(L l, expression_t <T> expr) {
909
+ return {std::move (l), std::move (expr.value )};
910
+ }
908
911
909
- template <class T , class R >
910
- internal:: conc_t <T, R> operator ||(internal:: expression_t <T> expr, R r) {
911
- return {std::move (expr.value ), std::move (r)};
912
- }
912
+ template <class T , class R >
913
+ conc_t <T, R> operator ||(expression_t <T> expr, R r) {
914
+ return {std::move (expr.value ), std::move (r)};
915
+ }
913
916
914
- template <class L , class T >
915
- internal:: conc_t <L, T> operator ||(L l, internal:: expression_t <T> expr) {
916
- return {std::move (l), std::move (expr.value )};
917
- }
917
+ template <class L , class T >
918
+ conc_t <L, T> operator ||(L l, expression_t <T> expr) {
919
+ return {std::move (l), std::move (expr.value )};
920
+ }
918
921
919
- template <class L , class R >
920
- internal:: conc_t <L, R> operator ||(internal:: expression_t <L> l, internal:: expression_t <R> r) {
921
- return {std::move (l.value ), std::move (r.value )};
922
- }
922
+ template <class L , class R >
923
+ conc_t <L, R> operator ||(expression_t <L> l, expression_t <R> r) {
924
+ return {std::move (l.value ), std::move (r.value )};
925
+ }
923
926
924
- template <class R , class E , internal:: satisfies<std::is_base_of, internal:: conc_string, E> = true >
925
- internal:: conc_t <E, R> operator ||(E expr, R r) {
926
- return {std::move (expr), std::move (r)};
927
- }
927
+ template <class R , class E , satisfies<std::is_base_of, conc_string, E> = true >
928
+ conc_t <E, R> operator ||(E expr, R r) {
929
+ return {std::move (expr), std::move (r)};
930
+ }
928
931
929
- template <class L , class E , internal:: satisfies<std::is_base_of, internal:: conc_string, E> = true >
930
- internal:: conc_t <L, E> operator ||(L l, E expr) {
931
- return {std::move (l), std::move (expr)};
932
- }
932
+ template <class L , class E , satisfies<std::is_base_of, conc_string, E> = true >
933
+ conc_t <L, E> operator ||(L l, E expr) {
934
+ return {std::move (l), std::move (expr)};
935
+ }
933
936
934
- template <class T , class R >
935
- internal:: add_t <T, R> operator +(internal:: expression_t <T> expr, R r) {
936
- return {std::move (expr.value ), std::move (r)};
937
- }
937
+ template <class T , class R >
938
+ add_t <T, R> operator +(expression_t <T> expr, R r) {
939
+ return {std::move (expr.value ), std::move (r)};
940
+ }
938
941
939
- template <class L , class T >
940
- internal:: add_t <L, T> operator +(L l, internal:: expression_t <T> expr) {
941
- return {std::move (l), std::move (expr.value )};
942
- }
942
+ template <class L , class T >
943
+ add_t <L, T> operator +(L l, expression_t <T> expr) {
944
+ return {std::move (l), std::move (expr.value )};
945
+ }
943
946
944
- template <class L , class R >
945
- internal:: add_t <L, R> operator +(internal:: expression_t <L> l, internal:: expression_t <R> r) {
946
- return {std::move (l.value ), std::move (r.value )};
947
- }
947
+ template <class L , class R >
948
+ add_t <L, R> operator +(expression_t <L> l, expression_t <R> r) {
949
+ return {std::move (l.value ), std::move (r.value )};
950
+ }
948
951
949
- template <class T , class R >
950
- internal:: sub_t <T, R> operator -(internal:: expression_t <T> expr, R r) {
951
- return {std::move (expr.value ), std::move (r)};
952
- }
952
+ template <class T , class R >
953
+ sub_t <T, R> operator -(expression_t <T> expr, R r) {
954
+ return {std::move (expr.value ), std::move (r)};
955
+ }
953
956
954
- template <class L , class T >
955
- internal:: sub_t <L, T> operator -(L l, internal:: expression_t <T> expr) {
956
- return {std::move (l), std::move (expr.value )};
957
- }
957
+ template <class L , class T >
958
+ sub_t <L, T> operator -(L l, expression_t <T> expr) {
959
+ return {std::move (l), std::move (expr.value )};
960
+ }
958
961
959
- template <class L , class R >
960
- internal:: sub_t <L, R> operator -(internal:: expression_t <L> l, internal:: expression_t <R> r) {
961
- return {std::move (l.value ), std::move (r.value )};
962
- }
962
+ template <class L , class R >
963
+ sub_t <L, R> operator -(expression_t <L> l, expression_t <R> r) {
964
+ return {std::move (l.value ), std::move (r.value )};
965
+ }
963
966
964
- template <class T , class R >
965
- internal:: mul_t <T, R> operator *(internal:: expression_t <T> expr, R r) {
966
- return {std::move (expr.value ), std::move (r)};
967
- }
967
+ template <class T , class R >
968
+ mul_t <T, R> operator *(expression_t <T> expr, R r) {
969
+ return {std::move (expr.value ), std::move (r)};
970
+ }
968
971
969
- template <class L , class T >
970
- internal:: mul_t <L, T> operator *(L l, internal:: expression_t <T> expr) {
971
- return {std::move (l), std::move (expr.value )};
972
- }
972
+ template <class L , class T >
973
+ mul_t <L, T> operator *(L l, expression_t <T> expr) {
974
+ return {std::move (l), std::move (expr.value )};
975
+ }
973
976
974
- template <class L , class R >
975
- internal:: mul_t <L, R> operator *(internal:: expression_t <L> l, internal:: expression_t <R> r) {
976
- return {std::move (l.value ), std::move (r.value )};
977
- }
977
+ template <class L , class R >
978
+ mul_t <L, R> operator *(expression_t <L> l, expression_t <R> r) {
979
+ return {std::move (l.value ), std::move (r.value )};
980
+ }
978
981
979
- template <class T , class R >
980
- internal:: div_t <T, R> operator /(internal:: expression_t <T> expr, R r) {
981
- return {std::move (expr.value ), std::move (r)};
982
- }
982
+ template <class T , class R >
983
+ div_t <T, R> operator /(expression_t <T> expr, R r) {
984
+ return {std::move (expr.value ), std::move (r)};
985
+ }
983
986
984
- template <class L , class T >
985
- internal:: div_t <L, T> operator /(L l, internal:: expression_t <T> expr) {
986
- return {std::move (l), std::move (expr.value )};
987
- }
987
+ template <class L , class T >
988
+ div_t <L, T> operator /(L l, expression_t <T> expr) {
989
+ return {std::move (l), std::move (expr.value )};
990
+ }
988
991
989
- template <class L , class R >
990
- internal:: div_t <L, R> operator /(internal:: expression_t <L> l, internal:: expression_t <R> r) {
991
- return {std::move (l.value ), std::move (r.value )};
992
- }
992
+ template <class L , class R >
993
+ div_t <L, R> operator /(expression_t <L> l, expression_t <R> r) {
994
+ return {std::move (l.value ), std::move (r.value )};
995
+ }
993
996
994
- template <class T , class R >
995
- internal:: mod_t <T, R> operator %(internal:: expression_t <T> expr, R r) {
996
- return {std::move (expr.value ), std::move (r)};
997
- }
997
+ template <class T , class R >
998
+ mod_t <T, R> operator %(expression_t <T> expr, R r) {
999
+ return {std::move (expr.value ), std::move (r)};
1000
+ }
998
1001
999
- template <class L , class T >
1000
- internal:: mod_t <L, T> operator %(L l, internal:: expression_t <T> expr) {
1001
- return {std::move (l), std::move (expr.value )};
1002
- }
1002
+ template <class L , class T >
1003
+ mod_t <L, T> operator %(L l, expression_t <T> expr) {
1004
+ return {std::move (l), std::move (expr.value )};
1005
+ }
1003
1006
1004
- template <class L , class R >
1005
- internal::mod_t <L, R> operator %(internal::expression_t <L> l, internal::expression_t <R> r) {
1006
- return {std::move (l.value ), std::move (r.value )};
1007
+ template <class L , class R >
1008
+ mod_t <L, R> operator %(expression_t <L> l, expression_t <R> r) {
1009
+ return {std::move (l.value ), std::move (r.value )};
1010
+ }
1007
1011
}
1008
1012
1009
1013
template <class F , class O >
0 commit comments