Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Empty std::tuple<> cannot be serialized and de-serialized #4530

Open
2 tasks done
moratom opened this issue Dec 6, 2024 · 1 comment · May be fixed by #4594
Open
2 tasks done

Empty std::tuple<> cannot be serialized and de-serialized #4530

moratom opened this issue Dec 6, 2024 · 1 comment · May be fixed by #4594

Comments

@moratom
Copy link

moratom commented Dec 6, 2024

Description

The behavior of serializing and de-sereailzing an empty tuple changed from 3.9.1 to 3.10.0.

null used to de-serialize without a problem to std::tuple<> but since throws an error since 3.10.0.

The change of behavior happened in #2576.

Note that I'm not entirely sure this is a bug per-say, but we relied on this behavior in https://github.com/luxonis/depthai-core so I decided to report in case the previous behavior was "more correct".

Reproduction steps

To reproduce run the MRE with both 3.10.0 and 3.9.1.

Expected vs. actual results

Expected - null succesfully de-serializes when j.get<std::tuple<>>() is called on null.
Actual:

terminate called after throwing an instance of 'nlohmann::detail::type_error'
  what():  [json.exception.type_error.302] type must be array, but is null

Minimal code example

#include <nlohmann/json.hpp>

int main() {
    auto sourceTuple = std::tuple<>();
    nlohmann::json j = sourceTuple;
    auto returnedTuple = j.get<std::tuple<>>();
    return 0;
}

Error messages

terminate called after throwing an instance of 'nlohmann::detail::type_error'
  what():  [json.exception.type_error.302] type must be array, but is null
Aborted (core dumped)

Compiler and operating system

Ubuntu 20.04, GCC 9.4.0

Library version

3.11.3

Validation

@codenut
Copy link
Contributor

codenut commented Jan 12, 2025

This bug occurs because an empty tuple std::tuple<>() is being serialized as "null" instead of "[]".

Current behavior

nlohmann::json j = sourceTuple;  
auto js = j.dump(); // "null"

Expected behavior

nlohmann::json j = sourceTuple;  
auto js = j.dump(); // "[]"

@nlohmann I will work on a fix for this.

@codenut codenut linked a pull request Jan 12, 2025 that will close this issue
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants