Skip to content

COMP: Fix build of json(HelperFunction|Resource).cxx on AppleClang 11.0

This commit fixes the following error reported when building smtk using Apple clang version 11.0.3 (clang-1103.0.32.62) and nlohmann_json v3.8.0.

For reference:

avevaSlicer SMTK Continuous Integration
compiler Apple clang version 11.0.3 (clang-1103.0.32.62) AppleClang 13.0.0.13000029
nlohmann_json v3.8.0 v3.6.1

Error:

  /Applications/Xcode_11.7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:3200:38: error: incomplete type 'pugi::xml_node' used in type trait expression
      : public integral_constant<bool, __is_constructible(_Tp, _Args...)>
                                       ^
  /Applications/Xcode_11.7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:3446:14: note: in instantiation of template class
        'std::__1::is_constructible<pugi::xml_node>' requested here
      : public is_constructible<_Tp>
               ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:3069:10: note: in instantiation of template class 'std::__1::is_default_constructible<pugi::xml_node>' requested here
      std::is_default_constructible<ConstructibleArrayType>::value and
           ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:3095:7: note: during template argument deduction for class template partial specialization
        'is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType, enable_if_t<!std::is_same<ConstructibleArrayType, typename BasicJsonType::value_type>::value &&
        std::is_default_constructible<ConstructibleArrayType>::value && (std::is_move_assignable<ConstructibleArrayType>::value || std::is_copy_assignable<ConstructibleArrayType>::value) &&
        is_detected<value_type_t, ConstructibleArrayType>::value && is_detected<iterator_t, ConstructibleArrayType>::value && is_complete_type<detected_t<value_type_t, ConstructibleArrayType> >::value> >'
        [with BasicJsonType = nlohmann::basic_json<std::map, std::vector, std::__1::basic_string<char>, bool, long long, unsigned long long, double, std::allocator, adl_serializer,
        std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >, ConstructibleArrayType = pugi::xml_node]
      : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType> {};
        ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:3095:7: note: in instantiation of template class
        'nlohmann::detail::is_constructible_array_type_impl<nlohmann::basic_json<std::map, std::vector, std::__1::basic_string<char>, bool, long long, unsigned long long, double, std::allocator,
        adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >, pugi::xml_node, void>' requested here
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:3448:15: note: in instantiation of template class 'nlohmann::detail::is_constructible_array_type<nlohmann::basic_json<std::map,
        std::vector, std::__1::basic_string<char>, bool, long long, unsigned long long, double, std::allocator, adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > >,
        pugi::xml_node>' requested here
                is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value and
                ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:3454:6: note: (skipping 13 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
  auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
       ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:2692:1: note: during template argument deduction for class template partial specialization
        'detector<Default, void_t<Op<Args...> >, Op, Args...>' [with Default = nlohmann::detail::nonesuch, Op = get_template_function, Args = <const nlohmann::basic_json<std::map, std::vector,
        std::__1::basic_string<char>, bool, long long, unsigned long long, double, std::allocator, adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > &, pugi::xml_node>]
  using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
  ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:2692:1: note: in instantiation of template class 'nlohmann::detail::detector<nlohmann::detail::nonesuch, void,
        get_template_function, const nlohmann::basic_json<std::map, std::vector, std::__1::basic_string<char>, bool, long long, unsigned long long, double, std::allocator, adl_serializer,
        std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > > &, pugi::xml_node>' requested here
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:18994:32: note: in instantiation of template type alias 'is_detected' requested here
                     and detail::is_detected<detail::get_template_function, const basic_json_t&, ValueType>::value
                                 ^
  /path/to/aevaSlicer-Release/nlohmann_json/single_include/nlohmann/json.hpp:18996:5: note: while substituting prior template arguments into non-type template parameter [with ValueType = pugi::xml_node]
      operator ValueType() const
      ^~~~~~~~~~~~~~~~~~~~~~~~~~
  /path/to/aevaSlicer-Release/smtk/smtk/attribute/json/jsonResource.cxx:659:29: note: while substituting deduced template arguments into function template 'operator type-parameter-0-0'
        [with ValueType = pugi::xml_node, $1 = (no value)]
        (*associationRule) << associationRuleObj;
                              ^
  /path/to/aevaSlicer-Release/smtk/smtk/attribute/AssociationRule.h:26:7: note: forward declaration of 'pugi::xml_node'
  class xml_node;
        ^
  1 error generated.

Co-authored-by: Jean-Christophe Fillion-Robin jchris.fillionr@kitware.com

Edited by Jean-Christophe Fillion-Robin

Merge request reports