-
-
Notifications
You must be signed in to change notification settings - Fork 7.3k
Closed
Labels
release item: 🐛 bug fixsolution: proposed fixa fix for the issue has been proposed and waits for confirmationa fix for the issue has been proposed and waits for confirmation
Milestone
Description
This may be similar to #1261, but version 3.3.0, on my tested compilers, will stack overflow trying to serialize a variant instead of yelling at compile time that it doesn't know how to do it.
With this code:
#include "json.hpp"
#include <variant>
#include <iostream>
int main() {
std::variant<int, float, std::string> t = 3.14159f;
std::cout << nlohmann::json(t).dump() << std::endl;
}MSVC 19.14.26430 will produce the cryptic and lengthy error C4717:
'nlohmann::detail::json_ref<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >::json_ref<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> ><std::variant<int,float,std::basic_string<char,std::char_traits<char>,std::allocator<char> > > &>': recursive on all control paths, function will cause runtime stack overflow
And crash with a stack overflow when run. GCC 7.3.0 and Clang 6.0.0 will not produce a compile error, but will segfault. An earlier version of json I was working with, 3.1.2, instead complains that it's not sure how to serialize a std::variant on all previously tested compilers.
json.hpp:1545:5: error: static assertion failed: could not find to_json() method in T's namespace
static_assert(sizeof(BasicJsonType) == 0,
I cannot even begin to claim to know what the resolution of this problem might even vaguely look like, but I hope this is helpful information. Hopefully I'm not just doing something horribly wrong.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
release item: 🐛 bug fixsolution: proposed fixa fix for the issue has been proposed and waits for confirmationa fix for the issue has been proposed and waits for confirmation