Json.move_or
template<typename T, typename D = Nul>
requires convertible<Json, T> || convertible_map<Json, T, D> || convertible_array<Json, T, D>
T move_or( T default_result, D default_range_elem = D{} ) noexcept;
Performs move-conversion of internal data to type T
, returning specified default value on failure.
Key Features: - Full compile-time type checking (incompatible types rejected during compilation) - Runtime type safety (may still fail due to JSON's dynamic nature) - Source object becomes Nul after successful move (even if return value is unused)
Conversion Rules: 1. Nul → Nul 2. Obj → Obj (move) 3. Arr → Arr (move) 4. Str → Str (move) 5. Bol → Bol (copy) 6. Num → Enum (rounded) 7. Num → Integer (rounded) 8. Num → Floating-point 9. Any → Json-constructible (move preferred) 10. Obj → Implicitly convertible (move preferred) 11. Arr → Implicitly convertible (move preferred) 12. Str → Implicitly convertible (move preferred) 13-15. Primitive → Implicitly convertible (Nul excludes bool) 16. Obj → Key-value container (element-wise, move preferred) 17. Arr → Sequence container (element-wise, move preferred) 18. Returns default_result
Parameters:
- T
: Target type
- default_result
: Fallback return value
- default_range_elem
: Element-level fallback (array/object only)
Exception Safety
No-throw guarantee.
Complexity: - O(1) for movable types - O(n) for element-wise conversions
Best Practice: - Explicitly reset source object after move - Prefer move semantics for complex types - Use default_result for safe fallback handling
Version
Since v3.0.0 .