On Tuesday 14 December 2010 00:23:58 Walter Bright wrote: > bearophile wrote: > > Andrei: > >> D's constrained templates were introduced on 17 June 2008 and they've > >> been a smashing hit. Virtually all of Phobos uses them, and I'm sure a > >> lot of generic client code. They take half a minute to explain and > >> solve a difficult problem in a very simple manner.< > > > > A template with two constrains makes it less handy to add error messages > > that > > > explain why the instantiation has failed: > Adding such error messages misses the point of constraints. The idea is > that template overloading is based on constraints. Given 3 templates with > 3 constraints, overload resolution picks the one with constraints that > pass. Giving error messages for the others is wrong. > > If you want it to produce error messages if the instantiation is wrong, the > correct way is to use static asserts within the template body. No > additional features serve any purpose.
It could definitely serve a purpose if _all_ of the possible template specializations fail. Presumably, you intend _one_ of them to work. But that _does_ mean that you get error messages for a number of different template specializations, and you have to sort through them. It _can_ take a fair bit of effort to figure out why a particular template constraint is failing, and it would definitely be nice if there were more information on _why_ a template constraint fails. However, I do agree that doing so could get rather complicated, and that ultimately, it probably isn't worth it. I fully expect, however, that many people in the future will complain that they can't get better error messages which indicate why a particular template constraint failed. - Jonathan M Davis
