-inline fbstring dynamic::asString() const { return asImpl<fbstring>(); }
-inline double dynamic::asDouble() const { return asImpl<double>(); }
-inline int64_t dynamic::asInt() const { return asImpl<int64_t>(); }
-inline bool dynamic::asBool() const { return asImpl<bool>(); }
+inline std::string dynamic::asString() const {
+ return asImpl<std::string>();
+}
+inline double dynamic::asDouble() const {
+ return asImpl<double>();
+}
+inline int64_t dynamic::asInt() const {
+ return asImpl<int64_t>();
+}
+inline bool dynamic::asBool() const {
+ return asImpl<bool>();
+}
+
+inline const std::string& dynamic::getString() const& {
+ return get<std::string>();
+}
+inline double dynamic::getDouble() const& { return get<double>(); }
+inline int64_t dynamic::getInt() const& { return get<int64_t>(); }
+inline bool dynamic::getBool() const& { return get<bool>(); }
+
+inline std::string& dynamic::getString()& {
+ return get<std::string>();
+}
+inline double& dynamic::getDouble() & { return get<double>(); }
+inline int64_t& dynamic::getInt() & { return get<int64_t>(); }
+inline bool& dynamic::getBool() & { return get<bool>(); }
+
+inline std::string&& dynamic::getString()&& {
+ return std::move(get<std::string>());
+}
+inline double dynamic::getDouble() && { return get<double>(); }
+inline int64_t dynamic::getInt() && { return get<int64_t>(); }
+inline bool dynamic::getBool() && { return get<bool>(); }
+
+inline const char* dynamic::data() const& {
+ return get<std::string>().data();
+}
+inline const char* dynamic::c_str() const& {
+ return get<std::string>().c_str();
+}
+inline StringPiece dynamic::stringPiece() const {
+ return get<std::string>();
+}