何时使用C ++ 20中的约束来实现模板

我尝试找出何时应该使用C ++ 20模板约束。

目前,我仅使用约束来消除模板重载的歧义。

但是,还有许多未超载的模板。实际上,所有这些对象都对模板类型的功能有隐含的期望。

As an example lets assume a function template that implicitly expects a container type and accesses that container by calling a T::size() method and using the T::operator[] operator. Normally I get a compile error if the passed type doesn't provide the T::size() method and/or the T::operator[]. Still I could add explicit constraints to express the required features.

在哪种情况下,依靠隐式编译错误而不是显式约束是致命的?除了使用约束作为文档的一部分之外,显式约束比隐式需求有什么优势?