microsoft / microsoft/STL

Was the ABI break between 14.1 and 14.2 in std::_Hash and derived containers intentional?

Open
#2,225 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug documentation
Dominant language
C++
Stars
11.1k
Forks
1.7k
Avg merge
4d 15h
Merged PRs (30d)
22

Description

I am working with a library that uses std::unordered_map and std::unordered_set in its exported API. The library is compiled with VC 14.16. When an application compiled with 14.29 is linked to this library the linker fails to resolve std::_Hash::_Insert_new_node_before, which exists in the 14.29 xhash header but not in 14.16.

Is this ABI breaking change intentional?

Aside from not using any STL containers in a library API, is there some known workaround for this where we could continue to compile the library with 14.16 and applications with 14.29? We can break our ABI if necessary but not our API at this point.

Do the ABI stability and compatibility guarantees in VC 14.x extend to the STL included with these versions?

Thanks,
Jake

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by comparing the VC 14.16 and 14.29 xhash headers, focusing on std::_Hash::_Insert_new_node_before and the exported unordered container API. Determine whether the symbol difference is an intentional ABI change and document any supported compatibility workaround; the issue is done when the ABI guarantee and migration path are clear.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.