I’ve seen this issue mentioned in some random and hard to reach places on the Net, so I thought I’d re-express it here for those who find Google sending them this way.
…Whenever a string is deconstructed, the standard library would check whether that string’s address matches matches the empty string’s: if so, it does nothing; if not, it calls =free=.
…If a library that does have fully dynamic strings enabled (aka the standard library) receives an empty string from code which does not have it enabled (aka, the app you just built), it will try to free it and your application will crash.
…Since my standard library is compiled with fully dynamic strings, the destructor for =basic string= doesn’t recognize that its the “special” empty string, so it tries to free it.
When the master branch is at a state where I want to finally release it, I merge with =—no-ff=, so the merge gets represented as a single commit on the maint branch.
…Since most development work happens on “next”, each time next is stable I merge into master, using =—no-ff= to keep the merge commits together.
… Note that no commits are ever made directly to master, unless I’ve seriously broken something that needs to be addressed sooner than the next merge from “next”.
… Then there are the various local-only topic branches that live on my machine, in which I develop highly unstable code relating to one feature or another, awaiting the day when it becomes stable enough to be merge into “next”.
Recent Comments
- Giuseppe Maggiore on A word on Haskell Monads and C++
- stevenm on Diving into Git
- johnw on Life and times of a TCP packet
- marllis on Life and times of a TCP packet
- Rose on Git from the bottom up
