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

GCC 10 tests build failure #1920

Closed
xvitaly opened this issue Jan 31, 2020 · 4 comments · Fixed by #2034
Closed

GCC 10 tests build failure #1920

xvitaly opened this issue Jan 31, 2020 · 4 comments · Fixed by #2034
Assignees
Labels
kind: bug release item: 🐛 bug fix solution: proposed fix a fix for the issue has been proposed and waits for confirmation
Milestone

Comments

@xvitaly
Copy link
Contributor

xvitaly commented Jan 31, 2020

  • What is the issue you have?

Unit tests build failure.

  • Please describe the steps to reproduce the issue. Can you provide a small but working code example?

Build using GCC 10.0.

  • What is the expected behavior?

Successful build.

  • And what is the actual behavior instead?

Build failure:

[40/83] /usr/bin/c++  -DDOCTEST_CONFIG_SUPER_FAST_ASSERTS -I../test/thirdparty/doctest -I../test/thirdparty/fifo_map -I../single_include -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection   -Wno-deprecated -Wno-float-equal -Wno-deprecated-declarations -MD -MT test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o -MF test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o.d -o test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o -c ../test/src/unit-concepts.cpp
FAILED: test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o 
/usr/bin/c++  -DDOCTEST_CONFIG_SUPER_FAST_ASSERTS -I../test/thirdparty/doctest -I../test/thirdparty/fifo_map -I../single_include -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection   -Wno-deprecated -Wno-float-equal -Wno-deprecated-declarations -MD -MT test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o -MF test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o.d -o test/CMakeFiles/test-concepts.dir/src/unit-concepts.cpp.o -c ../test/src/unit-concepts.cpp
In file included from /usr/include/c++/10/bits/move.h:57,
                 from /usr/include/c++/10/bits/stl_pair.h:59,
                 from /usr/include/c++/10/utility:70,
                 from /usr/include/c++/10/algorithm:60,
                 from ../single_include/nlohmann/json.hpp:37,
                 from ../test/src/unit-concepts.cpp:32:
/usr/include/c++/10/type_traits: In instantiation of 'struct std::is_constructible<nlohmann::basic_json<>, const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&>':
../single_include/nlohmann/json.hpp:11120:79:   required by substitution of 'template<class ... Args, typename std::enable_if<std::is_constructible<nlohmann::basic_json<>, Args ...>::value, int>::type <anonymous> > nlohmann::detail::json_ref<nlohmann::basic_json<> >::json_ref(Args&& ...) [with Args = {const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&}; typename std::enable_if<std::is_constructible<nlohmann::basic_json<>, Args ...>::value, int>::type <anonymous> = <missing>]'
/usr/include/c++/10/type_traits:897:30:   required from 'struct std::__is_constructible_impl<nlohmann::basic_json<>, const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&>'
/usr/include/c++/10/type_traits:926:12:   required from 'struct std::__is_copy_constructible_impl<nlohmann::basic_json<>, true>'
/usr/include/c++/10/type_traits:932:12:   required from 'struct std::is_copy_constructible<nlohmann::basic_json<> >'
../test/src/unit-concepts.cpp:104:13:   required from here
/usr/include/c++/10/type_traits:902:12: error: invalid use of incomplete type 'struct std::__is_constructible_impl<nlohmann::basic_json<>, const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&>'
  902 |     struct is_constructible
      |            ^~~~~~~~~~~~~~~~
/usr/include/c++/10/type_traits:896:12: note: declaration of 'struct std::__is_constructible_impl<nlohmann::basic_json<>, const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&>'
  896 |     struct __is_constructible_impl
      |            ^~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/10/utility:70,
                 from /usr/include/c++/10/algorithm:60,
                 from ../single_include/nlohmann/json.hpp:37,
                 from ../test/src/unit-concepts.cpp:32:
/usr/include/c++/10/bits/stl_pair.h: In instantiation of 'static constexpr bool std::_PCC<<anonymous>, _T1, _T2>::_ConstructiblePair() [with _U1 = const std::__cxx11::basic_string<char>; _U2 = nlohmann::basic_json<>; bool <anonymous> = true; _T1 = const std::__cxx11::basic_string<char>; _T2 = nlohmann::basic_json<>]':
/usr/include/c++/10/bits/stl_pair.h:261:35:   required by substitution of 'template<class _U1, class _U2, typename std::enable_if<(_ConstructiblePair<_U1, _U2>() && _ImplicitlyConvertiblePair<_U1, _U2>()), bool>::type <anonymous> > constexpr std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >::pair(const std::__cxx11::basic_string<char>&, const nlohmann::basic_json<>&) [with _U1 = const std::__cxx11::basic_string<char>; _U2 = nlohmann::basic_json<>; typename std::enable_if<(_ConstructiblePair<_U1, _U2>() && _ImplicitlyConvertiblePair<_U1, _U2>()), bool>::type <anonymous> = <missing>]'
/usr/include/c++/10/bits/alloc_traits.h:504:20:   required from 'static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >; _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>}; _Tp = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > > >]'
/usr/include/c++/10/bits/stl_tree.h:614:32:   required from 'void std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_construct_node(std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type, _Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; _Compare = std::less<void>; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >*]'
/usr/include/c++/10/bits/stl_tree.h:631:21:   required from 'std::_Rb_tree_node<_Val>* std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_create_node(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; _Compare = std::less<void>; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_Link_type = std::_Rb_tree_node<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >*]'
/usr/include/c++/10/bits/stl_tree.h:2399:33:   required from 'std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_emplace_unique(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>}; _Key = std::__cxx11::basic_string<char>; _Val = std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >; _KeyOfValue = std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; _Compare = std::less<void>; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >]'
/usr/include/c++/10/bits/stl_map.h:577:33:   required from 'std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::emplace(_Args&& ...) [with _Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>}; _Key = std::__cxx11::basic_string<char>; _Tp = nlohmann::basic_json<>; _Compare = std::less<void>; _Alloc = std::allocator<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >; typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<std::pair<const _Key, _Tp> >::other>::iterator = std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> >, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > >, std::less<void>, std::allocator<std::pair<const std::__cxx11::basic_string<char>, nlohmann::basic_json<> > > >::iterator]'
../single_include/nlohmann/json.hpp:16036:40:   required from 'nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::basic_json(nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::initializer_list_t, bool, nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::value_t) [with ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::adl_serializer; nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::initializer_list_t = std::initializer_list<nlohmann::detail::json_ref<nlohmann::basic_json<> > >; nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::value_t = nlohmann::detail::value_t]'
../test/src/unit-concepts.cpp:154:32:   required from here
/usr/include/c++/10/bits/stl_pair.h:106:45: error: 'value' is not a member of 'std::__and_<std::is_constructible<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>, std::is_constructible<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>, const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&> >'
  106 |         is_constructible<_T2, const _U2&>>::value;
      |                                             ^~~~~
In file included from /usr/include/c++/10/memory:66,
                 from ../single_include/nlohmann/json.hpp:45,
                 from ../test/src/unit-concepts.cpp:32:
/usr/include/c++/10/bits/stl_uninitialized.h: In instantiation of '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const nlohmann::basic_json<>*, std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > > >; _ForwardIterator = nlohmann::basic_json<>*]':
/usr/include/c++/10/bits/stl_uninitialized.h:325:37:   required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator<const nlohmann::basic_json<>*, std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > > >; _ForwardIterator = nlohmann::basic_json<>*; _Tp = nlohmann::basic_json<>]'
/usr/include/c++/10/bits/stl_vector.h:555:31:   required from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = nlohmann::basic_json<>; _Alloc = std::allocator<nlohmann::basic_json<> >]'
/usr/include/c++/10/ext/new_allocator.h:151:4:   required from 'void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > >; _Args = {const std::vector<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>, std::allocator<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer> > >&}; _Tp = std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > >]'
/usr/include/c++/10/bits/alloc_traits.h:507:17:   required from 'static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > >; _Args = {const std::vector<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>, std::allocator<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer> > >&}; _Tp = std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > >; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > > >]'
../single_include/nlohmann/json.hpp:15381:35:   required from 'static T* nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::create(Args&& ...) [with T = std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > >; Args = {const std::vector<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>, std::allocator<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer> > >&}; ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::adl_serializer]'
../single_include/nlohmann/json.hpp:15533:36:   required from 'nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::json_value::json_value(const array_t&) [with ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::adl_serializer; nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::array_t = std::vector<nlohmann::basic_json<>, std::allocator<nlohmann::basic_json<> > >]'
../single_include/nlohmann/json.hpp:16365:25:   required from 'nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::basic_json(const nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>&) [with ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::adl_serializer]'
../single_include/nlohmann/json.hpp:11138:17:   required from 'nlohmann::detail::json_ref<BasicJsonType>::value_type nlohmann::detail::json_ref<BasicJsonType>::moved_or_copied() const [with BasicJsonType = nlohmann::basic_json<>; nlohmann::detail::json_ref<BasicJsonType>::value_type = nlohmann::basic_json<>]'
../single_include/nlohmann/json.hpp:16035:59:   required from 'nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::basic_json(nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::initializer_list_t, bool, nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::value_t) [with ObjectType = std::map; ArrayType = std::vector; StringType = std::__cxx11::basic_string<char>; BooleanType = bool; NumberIntegerType = long int; NumberUnsignedType = long unsigned int; NumberFloatType = double; AllocatorType = std::allocator; JSONSerializer = nlohmann::adl_serializer; nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::initializer_list_t = std::initializer_list<nlohmann::detail::json_ref<nlohmann::basic_json<> > >; nlohmann::basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer>::value_t = nlohmann::detail::value_t]'
../test/src/unit-concepts.cpp:154:32:   required from here
/usr/include/c++/10/bits/stl_uninitialized.h:137:72: error: 'value' is not a member of 'std::is_constructible<nlohmann::basic_json<>, const nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long int, long unsigned int, double, std::allocator, nlohmann::adl_serializer>&>'
  137 |       static_assert(is_constructible<_ValueType2, decltype(*__first)>::value,
      |                                                                        ^~~~~

GCC 10.0.1 from Fedora 32.

  • Did you use a released version of the library or the version from the develop branch?

Latest release.

@stac47
Copy link
Contributor

stac47 commented Feb 26, 2020

The problem here is that std::is_copy_constructible<json>::value (which is approximatively the same as std::is_constructible<json, const json&>::value will try to figure out if the constructor basic_json(const detail::json_ref<basic_json>& ref) is candidate for the lookup of copy constructor. This boils down to evaluating

    template <
        class... Args,
        enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 >
    json_ref(Args && ... args)
        : owned_value(std::forward<Args>(args)...), value_ref(&owned_value),
          is_rvalue(true) {}

With Args={const json&}. The enable_it_t<std::is_constructible<json, const json&>::value, int> = 0> creates an unresolvable cycle. Hence, json type is still considered as incomplete so cannot be used in the std::is_copy_constructible trait.

GCC 10 improved the detection of incomplete types usage in this commit: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=271806

I think this ticket deserves the maintainer attention because it will lead to compilation issues on user side of the library when they compile their code with GCC10.

@nlohmann
Copy link
Owner

Any idea how to fix this?

@ArtemSarmini
Copy link
Contributor

ArtemSarmini commented Mar 16, 2020

Thing is, this variadic perfect-forwarding ctor is matching copy/move ctor.
We could first check if (pseudocode) !((sizeof...(Args) == 1) && is_same_v<decay_t<Args_0>, json_ref>) to sfinae that ctor out in favor of copy/move. Ping me if PR is wanted.

@ArtemSarmini
Copy link
Contributor

I was wrong, that's mutual recursion cycle. Will try to figure something out.

nlohmann added a commit that referenced this issue Apr 13, 2020
…types

Templatize basic_json constructor from json_ref
@nlohmann nlohmann self-assigned this Apr 13, 2020
@nlohmann nlohmann added the solution: proposed fix a fix for the issue has been proposed and waits for confirmation label Apr 13, 2020
@nlohmann nlohmann added this to the Release 3.7.4 milestone Apr 13, 2020
geissonator added a commit to geissonator/meta-openembedded that referenced this issue May 17, 2020
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.
kraj pushed a commit to YoeDistro/meta-openembedded that referenced this issue May 17, 2020
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
halstead pushed a commit to openembedded/meta-openembedded that referenced this issue May 17, 2020
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
geissonator added a commit to openbmc/openbmc-build-scripts that referenced this issue May 21, 2020
nlohmann required some changes for gcc10. Those changes have not been
officially released yet by the project.

The following issues has details on the bug:
nlohmann/json#1920

Change-Id: I853f36f961fcd094a3f399028182c308a970c2e5
Signed-off-by: Andrew Geissler <[email protected]>
geissonator added a commit to openbmc/openbmc that referenced this issue May 22, 2020
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Change-Id: I92f641bf4859708fbf78d78448e16c39577a2e39
Signed-off-by: Andrew Geissler <[email protected]>
halstead pushed a commit to openembedded/meta-openembedded that referenced this issue Jun 3, 2020
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
(cherry picked from commit 12b707c)
Signed-off-by: Armin Kuster <[email protected]>
iipeace pushed a commit to iipeace/meta-openembedded that referenced this issue Jun 16, 2020
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
billpittman pushed a commit to billpittman/meta-openembedded that referenced this issue Apr 26, 2021
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
(cherry picked from commit 12b707c)
Signed-off-by: Armin Kuster <[email protected]>
daregit pushed a commit to daregit/yocto-combined that referenced this issue May 22, 2024
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
daregit pushed a commit to daregit/yocto-combined that referenced this issue May 22, 2024
The following issue and PR describe an issue with nlohmann-json and
GCC10.

nlohmann/json#1920
nlohmann/json#2034

Confirmed that this fixed the issue seen in OpenBMC when pulling in the
latest upstream meta-openembedded.

Signed-off-by: Khem Raj <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind: bug release item: 🐛 bug fix solution: proposed fix a fix for the issue has been proposed and waits for confirmation
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants