Hello, The attached patch is a proposal to simply rename a template type name in stl_map.h and stl_multimap.h in order to prevent clashes with a macro name exposed by a system header on VxWorks.
The conflicting name is _C2, which in principle is "reserved" for the system so having such a macro exposed by a system header doesn't seem to be a bug per se. I suppose that the libstdc++ headers can be considered part of the system as well in a way, so it's not really a bug there either. Fixing the OS headers is a major hassle on VxWorks, however, especially with more recent versions of the system, so we arranged not to rely on it at all up to now and a straightforward adjustment in the libstdc++ headers offers a way smoother and simpler way forward. I'm not sure what "C2" was intended to refer to so I picked an alternate name which seemed to match some aspects of the context while keeping the very-short-identifier style used throughout. This cures a lot of test failures with our gcc-9 based toolchains for VwWorks 7 and applies cleanly on mainline. I'm running a bootstrap & regression test cycle on x86_64-linux Would this be OK to commit ? Thanks in advance for your feedback, Olivier 2020-01-09 Olivier Hainque <hain...@adacore.com> libstdc++-v3/ * include/bits/stl_map.h: Rename _C2 template typenames as _Mt. * include/bits/stl_multimap.h: Likewise.
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h index 322d0a8290a..08170b91f00 100644 --- a/libstdc++-v3/include/bits/stl_map.h +++ b/libstdc++-v3/include/bits/stl_map.h @@ -635,30 +635,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER template<typename, typename> friend class std::_Rb_tree_merge_helper; - template<typename _C2> + template<typename _Mt> void - merge(map<_Key, _Tp, _C2, _Alloc>& __source) + merge(map<_Key, _Tp, _Mt, _Alloc>& __source) { - using _Merge_helper = _Rb_tree_merge_helper<map, _C2>; + using _Merge_helper = _Rb_tree_merge_helper<map, _Mt>; _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); } - template<typename _C2> + template<typename _Mt> void - merge(map<_Key, _Tp, _C2, _Alloc>&& __source) + merge(map<_Key, _Tp, _Mt, _Alloc>&& __source) { merge(__source); } - template<typename _C2> + template<typename _Mt> void - merge(multimap<_Key, _Tp, _C2, _Alloc>& __source) + merge(multimap<_Key, _Tp, _Mt, _Alloc>& __source) { - using _Merge_helper = _Rb_tree_merge_helper<map, _C2>; + using _Merge_helper = _Rb_tree_merge_helper<map, _Mt>; _M_t._M_merge_unique(_Merge_helper::_S_get_tree(__source)); } - template<typename _C2> + template<typename _Mt> void - merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source) + merge(multimap<_Key, _Tp, _Mt, _Alloc>&& __source) { merge(__source); } #endif // C++17 diff --git a/libstdc++-v3/include/bits/stl_multimap.h b/libstdc++-v3/include/bits/stl_multimap.h index 4c4ccad3ac0..099f1c99cae 100644 --- a/libstdc++-v3/include/bits/stl_multimap.h +++ b/libstdc++-v3/include/bits/stl_multimap.h @@ -651,30 +651,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER template<typename, typename> friend class std::_Rb_tree_merge_helper; - template<typename _C2> + template<typename _Mt> void - merge(multimap<_Key, _Tp, _C2, _Alloc>& __source) + merge(multimap<_Key, _Tp, _Mt, _Alloc>& __source) { - using _Merge_helper = _Rb_tree_merge_helper<multimap, _C2>; + using _Merge_helper = _Rb_tree_merge_helper<multimap, _Mt>; _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); } - template<typename _C2> + template<typename _Mt> void - merge(multimap<_Key, _Tp, _C2, _Alloc>&& __source) + merge(multimap<_Key, _Tp, _Mt, _Alloc>&& __source) { merge(__source); } - template<typename _C2> + template<typename _Mt> void - merge(map<_Key, _Tp, _C2, _Alloc>& __source) + merge(map<_Key, _Tp, _Mt, _Alloc>& __source) { - using _Merge_helper = _Rb_tree_merge_helper<multimap, _C2>; + using _Merge_helper = _Rb_tree_merge_helper<multimap, _Mt>; _M_t._M_merge_equal(_Merge_helper::_S_get_tree(__source)); } - template<typename _C2> + template<typename _Mt> void - merge(map<_Key, _Tp, _C2, _Alloc>&& __source) + merge(map<_Key, _Tp, _Mt, _Alloc>&& __source) { merge(__source); } #endif // C++17 -- 2.17.1