【发布时间】:2020-12-19 11:11:33
【问题描述】:
我想知道std::enable_if 相对于static_asserts 在防止模板实例化方面的优势。 This answer 建议,std::enable_if 允许 SFINAE,这在 function templates 的情况下是一个令人信服的论点。
但是这个论点对于class templates(和variable templates)是合法的吗?据我所知,那里没有涉及过载解决方案,这使得 SFINAE - 再次,据我所知 - 不相关,但我可能是错的。如果有,你能举个例子吗?
如果不是,我认为static_assert 对于类模板的给定问题(防止模板实例化)是更好的解决方案,因为它可以说更加明确、简洁和易读,并允许自定义错误消息。这是正确的还是我错过了 SFINAE 以外的一点?
【问题讨论】:
-
如果条件不成立,
static_assert不会阻止实例化。相反,它会使程序格式错误。 -
@Elliott hmmm...
-
@Elliott 标准是这么说的。 "如果转换后表达式的值为真,则声明无效。否则,程序格式错误"
标签: c++ templates enable-if static-assert class-template