Ste*_*sop 14
如果您认为非模板库可能只是标题库,请考虑将其分为两个文件,然后提供包含.h和.cpp(包含保护)的第三个文件.
然后,任何在很多不同的TU中使用你的库,并怀疑这可能花费大量编译时间的人都可以轻松地进行更改以测试它.
一旦您知道用户可以选择使用库的方式,答案可能会变成"随时提供该选项".因此,几乎任何时候从多个TU中包含它都不会违反ODR.例如,如果你的非static自由函数引用static全局变量,那么你就不走运了,因为不同TU中该函数的不同定义会引用同名的不同对象,这是一种ODR违规.