|
@@ -131,9 +131,9 @@ struct RawComparer : ComparerBase {
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
struct Comparer<T, typename enable_if<IsVisitable<T>::value>::type>
|
|
struct Comparer<T, typename enable_if<IsVisitable<T>::value>::type>
|
|
|
: ComparerBase {
|
|
: ComparerBase {
|
|
|
- T rhs;
|
|
|
|
|
|
|
+ const T *rhs; // TODO: should be a VariantConstRef
|
|
|
|
|
|
|
|
- explicit Comparer(T value) : rhs(value) {}
|
|
|
|
|
|
|
+ explicit Comparer(const T &value) : rhs(&value) {}
|
|
|
|
|
|
|
|
CompareResult visitArray(const CollectionData &lhs) {
|
|
CompareResult visitArray(const CollectionData &lhs) {
|
|
|
ArrayComparer comparer(lhs);
|
|
ArrayComparer comparer(lhs);
|
|
@@ -183,7 +183,7 @@ struct Comparer<T, typename enable_if<IsVisitable<T>::value>::type>
|
|
|
private:
|
|
private:
|
|
|
template <typename TComparer>
|
|
template <typename TComparer>
|
|
|
CompareResult accept(TComparer &comparer) {
|
|
CompareResult accept(TComparer &comparer) {
|
|
|
- CompareResult reversedResult = rhs.accept(comparer);
|
|
|
|
|
|
|
+ CompareResult reversedResult = rhs->accept(comparer);
|
|
|
switch (reversedResult) {
|
|
switch (reversedResult) {
|
|
|
case COMPARE_RESULT_GREATER:
|
|
case COMPARE_RESULT_GREATER:
|
|
|
return COMPARE_RESULT_LESS;
|
|
return COMPARE_RESULT_LESS;
|