diff --git a/src/ArduinoJson/Array/ElementProxy.hpp b/src/ArduinoJson/Array/ElementProxy.hpp index 33e73786..55ab3dd2 100644 --- a/src/ArduinoJson/Array/ElementProxy.hpp +++ b/src/ArduinoJson/Array/ElementProxy.hpp @@ -61,7 +61,7 @@ class ElementProxy : public VariantOperators >, } FORCE_INLINE bool isNull() const { - return getUpstreamElement().isNull(); + return getUpstreamElementConst().isNull(); } template @@ -87,14 +87,23 @@ class ElementProxy : public VariantOperators >, template FORCE_INLINE operator T() const { - return getUpstreamElement(); + return as(); } template - FORCE_INLINE bool is() const { + FORCE_INLINE + typename enable_if::value, bool>::type + is() const { return getUpstreamElement().template is(); } + template + FORCE_INLINE + typename enable_if::value, bool>::type + is() const { + return getUpstreamElementConst().template is(); + } + template FORCE_INLINE typename VariantTo::type to() const { return getOrAddUpstreamElement().template to(); @@ -127,11 +136,11 @@ class ElementProxy : public VariantOperators >, } FORCE_INLINE size_t size() const { - return getUpstreamElement().size(); + return getUpstreamElementConst().size(); } FORCE_INLINE size_t memoryUsage() const { - return getUpstreamElement().memoryUsage(); + return getUpstreamElementConst().memoryUsage(); } template @@ -213,7 +222,7 @@ class ElementProxy : public VariantOperators >, } friend void convertToJson(const this_type& src, VariantRef dst) { - dst.set(src.getUpstreamElement()); + dst.set(src.getUpstreamElement()); // TODO: getUpstreamElementConst ? } TArray _array; diff --git a/src/ArduinoJson/Object/MemberProxy.hpp b/src/ArduinoJson/Object/MemberProxy.hpp index 4419c3a0..67ae1618 100644 --- a/src/ArduinoJson/Object/MemberProxy.hpp +++ b/src/ArduinoJson/Object/MemberProxy.hpp @@ -36,7 +36,7 @@ class MemberProxy : public VariantOperators >, : _object(src._object), _key(src._key) {} FORCE_INLINE operator VariantConstRef() const { - return getUpstreamMember(); + return getUpstreamMemberConst(); } FORCE_INLINE this_type &operator=(const this_type &src) { @@ -65,7 +65,7 @@ class MemberProxy : public VariantOperators >, } FORCE_INLINE bool isNull() const { - return getUpstreamMember().isNull(); + return getUpstreamMemberConst().isNull(); } template @@ -91,20 +91,29 @@ class MemberProxy : public VariantOperators >, template FORCE_INLINE operator T() const { - return getUpstreamMember(); + return as(); } - template - FORCE_INLINE bool is() const { - return getUpstreamMember().template is(); + template + FORCE_INLINE + typename enable_if::value, bool>::type + is() const { + return getUpstreamMember().template is(); + } + + template + FORCE_INLINE + typename enable_if::value, bool>::type + is() const { + return getUpstreamMemberConst().template is(); } FORCE_INLINE size_t size() const { - return getUpstreamMember().size(); + return getUpstreamMemberConst().size(); } FORCE_INLINE size_t memoryUsage() const { - return getUpstreamMember().memoryUsage(); + return getUpstreamMemberConst().memoryUsage(); } FORCE_INLINE void remove(size_t index) const { @@ -189,14 +198,14 @@ class MemberProxy : public VariantOperators >, // getMemberConst(const __FlashStringHelper*) const template FORCE_INLINE VariantConstRef getMemberConst(TChar *key) const { - return getUpstreamMember().getMemberConst(key); + return getUpstreamMemberConst().getMemberConst(key); } // getMemberConst(const std::string&) const // getMemberConst(const String&) const template FORCE_INLINE VariantConstRef getMemberConst(const TString &key) const { - return getUpstreamMember().getMemberConst(key); + return getUpstreamMemberConst().getMemberConst(key); } // getOrAddMember(char*) const @@ -228,7 +237,7 @@ class MemberProxy : public VariantOperators >, } friend void convertToJson(const this_type &src, VariantRef dst) { - dst.set(src.getUpstreamMember()); + dst.set(src.getUpstreamMember()); // TODO: getUpstreamMemberConst ? } TObject _object;