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.
