Copyright (C) 2009 Sebastian Redl Distributed under the Boost Software License, Version 1.0. See http://www.boost.org/LICENSE_1_0.txt List all breaking changes done to the interface during the update here. - Template parameters Template parameters have been thoroughly changed. Impact: If you were using a custom instantiation of basic_ptree, you have to change your code. Rationale: The old order made no sense. It ordered the key comparison predicate before the key, although it could easily be defaulted based on it, and the path before the data type, when the path is something you will very rarely want to change (and it could default, too). - put* The put and put_child functions of basic_ptree had add and add_child split from them, by separating along the lines of the do_not_replace parameter. Impact: If you were using the third parameter of these functions, you have to change your code. Rationale: I'm not fond of using boolean parameters to change function behavior. They're hard to remember and hard to read in code. When projects adopt the convention of passing /*boolean=*/true, /*parameters=*/false, /*like=*/false this, something's wrong. It's even more wrong when the parameter has a negative name, as do_not_replace had. - Custom paths Custom paths have been thoroughly changed. Impact: If you were using custom paths, you have to change your code. If you referred to the basic_path template by name, you have to change your code. Rationale: The old interface required a huge amount of repeated code for custom paths. The new interface is a lot easier to implement. - Translators Translators have been thoroughly changed. Impact: If you were using translators at all, you probably have to change your code. Rationale: The new interface makes it easier to pass custom translators to specific get/put operations. It also keeps the translator out of the tree's type. - find find() returns an assoc_iterator. Impact: If you use find, you may have to change your code. Most importantly, you need to compare against not_found() instead of end(). Rationale: equal_range() also returns assoc_iterators. equal_range() cannot return normal iterators, since the conversion would not preserve the equal range or even the range property.