@@ -13,10 +13,10 @@ struct Comparer;
13
13
14
14
template <typename T>
15
15
struct Comparer <T, typename enable_if<IsString<T>::value>::type> {
16
- bool result;
17
16
T comparand;
17
+ bool result;
18
18
19
- explicit Comparer (T value) : comparand(value) {}
19
+ explicit Comparer (T value) : comparand(value), result( false ) {}
20
20
21
21
void visitArray (const CollectionData &) {}
22
22
void visitObject (const CollectionData &) {}
@@ -28,15 +28,17 @@ struct Comparer<T, typename enable_if<IsString<T>::value>::type> {
28
28
void visitNegativeInteger (UInt) {}
29
29
void visitPositiveInteger (UInt) {}
30
30
void visitBoolean (bool ) {}
31
- void visitNull () {}
31
+ void visitNull () {
32
+ result = adaptString (comparand).isNull ();
33
+ }
32
34
};
33
35
34
36
template <typename T>
35
37
struct ArithmeticComparer {
36
- bool result;
37
38
T comparand;
39
+ bool result;
38
40
39
- explicit ArithmeticComparer (T value) : comparand(value) {}
41
+ explicit ArithmeticComparer (T value) : comparand(value), result( false ) {}
40
42
41
43
void visitArray (const CollectionData &) {}
42
44
void visitObject (const CollectionData &) {}
@@ -114,7 +116,9 @@ class VariantComparisons {
114
116
template <typename T>
115
117
friend typename enable_if<is_simple_value<T>::value, bool >::type operator ==(
116
118
TVariant lhs, const T &rhs) {
117
- return lhs.template as <T>() == rhs;
119
+ ArithmeticComparer<T> comparer (rhs);
120
+ lhs.accept (comparer);
121
+ return comparer.result ;
118
122
}
119
123
120
124
// const char* != TVariant
@@ -149,14 +153,14 @@ class VariantComparisons {
149
153
template <typename T>
150
154
friend typename enable_if<is_simple_value<T>::value, bool >::type operator !=(
151
155
const T &lhs, TVariant rhs) {
152
- return lhs != rhs. template as <T>( );
156
+ return ! operator ==(lhs, rhs);
153
157
}
154
158
155
159
// TVariant != bool/int/float
156
160
template <typename T>
157
161
friend typename enable_if<is_simple_value<T>::value, bool >::type operator !=(
158
162
TVariant lhs, const T &rhs) {
159
- return lhs. template as <T>() != rhs;
163
+ return ! operator ==(lhs, rhs) ;
160
164
}
161
165
162
166
// bool/int/float < TVariant
0 commit comments