This article could be subtitled, and ends with, "Why we need Concepts."
Here's a quick take on how far you can get with just
static_assert, and why you might want to do that.
by Michael Price
From the article:
Templates are one of the most powerful features of C++, and provide the language with a serious advantage over many of its brethren. But templates have serious drawbacks as well, one of which is the incredibly verbose and dense error messages that are provided should you fail to provide the right kind of parameter to a templated entity.