Just as the title says. Should you print a depreciation warning, for how long?
What about when the code changes don’t break the old methods, just make the results they’re getting wrong? Do you explicitly break compilation so that they can’t get the wrong answer?
Backwards compatibility could relate to API or behavior or features.
Since we generally follow semantic versioning, backwards incompatible changes should be made in major releases, when the major version is changed, i.e. ITK 4 to ITK 5 as noted by @dzenanz. This helps users have an expectation that they can upgrade feature releases without many issues but expect that a few changes may be needed for updates to the major version.
A deprecation warning should be added and kept around nominally until the next major release. However, this depends on how widely adopted the behavior was and its impact - it could be longer or shorter or not at all.