nlohmann / json

JSON for Modern C++
https://json.nlohmann.me
MIT License
41.46k stars 6.59k forks source link

Importing std and redefined symbols #4049

Open mickes27 opened 1 year ago

mickes27 commented 1 year ago

Description

When exporting C++20 module with imported nlohmann::json as header unit and std module, a lot of redefinition errors occurs. This is not visible when importing iostream as header unit instead of std module.

Reproduction steps

Create primary interface module and import std module and nlohmann::json as header unit

Expected vs. actual results

It is expected to compile code without any error. As actual result, compilation fails.

Minimal code example

export module foo;
import std;
import <nlohmann/json.hpp>;

export class foo {
public:
    void helloworld();
};

void foo::helloworld()
{
    nlohmann::json v;
    v["example"] = "value";
    std::cout << v.dump() << std::endl;
}

Error messages

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstring(2358,52): error C2572: 'std::basic_string': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstring(2359,1): message : see declaration of 'std::basic_string' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstring(2358,87): error C2572: 'std::basic_string': redefinition of default argument: parameter 2 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstring(2359,1): message : see declaration of 'std::basic_string' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vector(437,49): error C2572: 'std::vector': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\format(71,7): message : see declaration of 'std::vector' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstddef(135,35): error C2572: 'std::less': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstddef(136,1): message : see declaration of 'std::less' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(42,47): error C2572: 'std::enable_if': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(43,1): message : see declaration of 'std::enable_if' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(116,9): error C7570: 'std::move_constructible': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(116,9): message : see declaration of 'std::move_constructible' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  PrivatePath\JsonModule\include\JsonModule\json.ixx(12,17): message : see reference to class template instantiation 'nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>>' being compiled [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(105,9): error C7570: 'std::constructible_from': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(105,9): message : see declaration of 'std::constructible_from' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(102,9): error C7570: 'std::destructible': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(102,9): message : see declaration of 'std::destructible' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(44,9): error C7570: 'std::convertible_to': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(44,9): message : see declaration of 'std::convertible_to' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(93,9): error C7570: 'std::assignable_from': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(93,9): message : see declaration of 'std::assignable_from' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(56,9): error C7570: 'std::common_reference_with': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(56,9): message : see declaration of 'std::common_reference_with' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(36,9): error C7570: 'std::same_as': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(36,9): message : see declaration of 'std::same_as' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
PrivatePath\JsonModule\include\JsonModule\json.ixx(12,1): error C2752: 'std::vector<bool,std::allocator<bool>>': more than one partial specialization matches the template argument list 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vector(2212): message : could be 'std::vector<bool,_Alloc>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vector(2212): message : or       'std::vector<bool,_Alloc>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(591,9): error C7570: 'std::input_iterator': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(591,9): message : see declaration of 'std::input_iterator' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  PrivatePath\JsonModule\include\JsonModule\json.ixx(12,1): message : see reference to class template instantiation 'std::vector<bool,std::allocator<bool>>' being compiled [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\__msvc_iter_core.hpp(391,9): error C7570: 'std::input_or_output_iterator': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\__msvc_iter_core.hpp(391,9): message : see declaration of 'std::input_or_output_iterator' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\__msvc_iter_core.hpp(378,9): error C7570: 'std::weakly_incrementable': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\__msvc_iter_core.hpp(378,9): message : see declaration of 'std::weakly_incrementable' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(253,9): error C7570: 'std::movable': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(253,9): message : see declaration of 'std::movable' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(167,9): error C7570: 'std::swappable': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(167,9): message : see declaration of 'std::swappable' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(509,9): error C7570: 'std::indirectly_readable': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(509,9): message : see declaration of 'std::indirectly_readable' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(39,9): error C7570: 'std::derived_from': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(39,9): message : see declaration of 'std::derived_from' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\map(72,58): error C2572: 'std::map': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\map(73,1): message : see declaration of 'std::map' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\map(72,85): error C2572: 'std::map': redefinition of default argument: parameter 2 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\map(73,1): message : see declaration of 'std::map' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
PrivatePath\JsonModule\out\build\x64-Debug\_deps\json-src\include\nlohmann\detail\iterators\iter_impl.hpp(50): error C2752: 'std::conditional<false,nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>>,const BasicJsonType>': more than one partial specialization matches the template argument list 
            with
            [
                BasicJsonType=nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>>
            ]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(59): message : could be 'std::conditional<false,_Ty1,_Ty2>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(59): message : or       'std::conditional<false,_Ty1,_Ty2>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  PrivatePath\JsonModule\out\build\x64-Debug\_deps\json-src\include\nlohmann\json.hpp(730,1): message : see reference to class template instantiation 'nlohmann::json_abi_v3_11_2::detail::iter_impl<nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>>>' being compiled [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\__msvc_iter_core.hpp(395,9): error C7570: 'std::sentinel_for': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\__msvc_iter_core.hpp(395,9): message : see declaration of 'std::sentinel_for' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(266,9): error C7570: 'std::semiregular': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(266,9): message : see declaration of 'std::semiregular' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(259,9): error C7570: 'std::copyable': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(259,9): message : see declaration of 'std::copyable' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(181,9): error C7570: 'std::copy_constructible': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(181,9): message : see declaration of 'std::copy_constructible' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(109,9): error C7570: 'std::default_initializable': variable template has already been defined 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concepts(109,9): message : see declaration of 'std::default_initializable' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
PrivatePath\JsonModule\out\build\x64-Debug\_deps\json-src\include\nlohmann\detail\iterators\iter_impl.hpp(82,1): error C2752: 'std::conditional<false,const nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>> *,nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>> *>': more than one partial specialization matches the template argument list 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(59): message : could be 'std::conditional<false,_Ty1,_Ty2>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(59): message : or       'std::conditional<false,_Ty1,_Ty2>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
PrivatePath\JsonModule\out\build\x64-Debug\_deps\json-src\include\nlohmann\detail\iterators\iter_impl.hpp(87,1): error C2752: 'std::conditional<false,const nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>> &,nlohmann::json_abi_v3_11_2::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char>>,bool,int64_t,uint64_t,double,std::allocator,nlohmann::json_abi_v3_11_2::adl_serializer,std::vector<uint8_t,std::allocator<uint8_t>>> &>': more than one partial specialization matches the template argument list 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(59): message : could be 'std::conditional<false,_Ty1,_Ty2>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(59): message : or       'std::conditional<false,_Ty1,_Ty2>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstring(930,52): error C2572: 'std::basic_string_view': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstring(1202,1): message : see declaration of 'std::basic_string_view' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\iosfwd(191,52): error C2572: 'std::basic_stringbuf': redefinition of default argument: parameter 1 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\sstream(24,1): message : see declaration of 'std::basic_stringbuf' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  PrivatePath\JsonModule\include\JsonModule\json.ixx(12): message : see reference to class template instantiation 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' being compiled [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\iosfwd(191,87): error C2572: 'std::basic_stringbuf': redefinition of default argument: parameter 2 
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\sstream(24,1): message : see declaration of 'std::basic_stringbuf' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
PrivatePath\JsonModule\include\JsonModule\json.ixx(13,13): error C2752: 'std::remove_reference<const char (&)[8]>': more than one partial specialization matches the template argument list [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(209): message : could be 'std::remove_reference<_Ty&>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xtr1common(209): message : or       'std::remove_reference<_Ty&>' [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
  PrivatePath\JsonModule\out\build\x64-Debug\_deps\json-src\include\nlohmann\detail\meta\type_traits.hpp(522,87): message : see reference to alias template instantiation 'nlohmann::json_abi_v3_11_2::detail::uncvref_t<const char(&)[8]>' being compiled [PrivatePath\JsonModule\out\build\x64-Debug\json.vcxproj]
PrivatePath\JsonModule\include\JsonModule\json.ixx(13,1): fatal error C1117: unrecoverable error importing module 'std': symbol 'id' has already been defined

Compiler and operating system

Visual Studio 2022 17.6.2

Library version

3.11.2

Validation