Conversation
🔴 Amalgamation check failed! 🔴The source code has not been amalgamated. @nlohmann |
| : json_base_class_t(std::forward<json_base_class_t>(other)), | ||
| m_data(std::move(other.m_data)) | ||
| // check that passed value is valid (has to be done before forwarding) | ||
| : json_base_class_t((other.assert_invariant(false), std::forward<json_base_class_t>(other))), |
There was a problem hiding this comment.
Can we just do assert_invariant(false); in the body (assert it in this after moving instead of asserting in other) to avoid this mess?
There was a problem hiding this comment.
Another possibility for avoiding all these issues is to do std::swap() on m_data and other.m_data in the body.
There was a problem hiding this comment.
I am not at all happy with this. I also thought about swapping...
There was a problem hiding this comment.
Sorry for asking a question for something that is probably obvious, but which constructor of json_base_class_t is this call valid for? I suppose it is one of the basic_json constructors being used here?
FWIW, it should be completely fine to check the invariants after the initializer list has been evaluated. Is there a possibility to consider rewriting the data move constructor so these assignments don't need to be done at this level?
|
I am currently blocked here: template < typename BasicJsonType, typename T, std::size_t... Idx >
std::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j,
identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/)
{
return { { std::forward<BasicJsonType>(j).at(Idx).template get<T>()... } };
}gives Any ideas? |
|
Every other Alternatively, if there is a defined need for moving from the |
|
I made some progress and now have an interesting issue: template<class KeyType, detail::enable_if_t<
detail::is_usable_as_basic_json_key_type<basic_json_t, KeyType>::value, int> = 0>
reference at(KeyType && key)
{
auto it = m_data.m_value.object->find(std::forward<KeyType>(key));
if (it == m_data.m_value.object->end())
{
JSON_THROW(out_of_range::create(403, detail::concat("key '", string_t(std::forward<KeyType>(key)), "' not found"), this)); // <-- warning here: 'key' used after it was forwarded
}
return set_parent(it->second);
}To fix this, I could either make a copy of |
🔴 Amalgamation check failed! 🔴The source code has not been amalgamated. @nlohmann |
|
I opened #4489 to get the CI green. Most issues from this PR are not addressed, but at least we have a clean slate. It would be great if someone could have a look. |
# .github/workflows/macos.yml # include/nlohmann/detail/input/parser.hpp # include/nlohmann/detail/meta/std_fs.hpp # include/nlohmann/json.hpp # single_include/nlohmann/json.hpp
|
This pull request has been marked as stale because it has had no activity for 30 days. While we won’t close it automatically, we encourage you to update or comment if it is still relevant. Keeping pull requests active and up-to-date helps us review and merge changes more efficiently. Thank you for your contributions! |
|
This pull request has been marked as stale because it has had no activity for 30 days. While we won’t close it automatically, we encourage you to update or comment if it is still relevant. Keeping pull requests active and up-to-date helps us review and merge changes more efficiently. Thank you for your contributions! |
modernize-use-designated-initializers does not work with C++11