Здравствуйте, collider, Вы писали:
C>Ну так программист специализировал для того, чтобы сделать какие то отличные от обычного поведения действия. Это ж не аргумент, для того чтобы брать и бежать дальше
Нет, это именно аргумент. Специализации предпочтительнее основного шаблона.
Вот для этого и делаются рукодельные решатели уравнений с типами. Всякие enable_if, type_traits и т.п.
Можно написать такой решатель: "какого типа должен быть параметр T, чтобы foo<T> можно было сконструировать из типа X, и чтобы результат нас удовлетворил".
Формально, у нас выбор:
— T = X, или даже любой тип, к которому приводится X
— T = U*, где U — любой тип, к которому приводится X
— T = char, если X приводится к int
Нас удовлетворит, вероятно, решение T = X, так как остальные слишком уж странные.
Хотя, вдруг нам важно делать исключение для int --> char ? Не просто так ведь оно там есть?