当扩展模板时发生错误时,编译器会打印正在实例化的模板链。在较旧的gcc中,跟踪看起来像(编辑:实际上它似乎是为功能模板执行此操作,但不适用于类模板)
... while expanding whatever<X, Y, Z> with [X=int, Y=double, Z=other]
但在g ++ 4.8和clang ++ 3.3中它看起来像
required from whatever<int, double, other>
虽然这个更短,但当模板有10个参数时,它也完全不可读,并且大多数是模板,其参数反过来是更多的模板,因此在几个层深。然后它就会融化成完全无法理解的尖括号(在编辑器中不被视为括号,所以甚至很难复制和粘贴并格式化它)。
有没有办法从两个编译器中强制使用更详细的格式?
如果还有办法将其扩展为分隔
这样的行... while expanding whatever<X, Y, Z> with
X=int
Y=double
Z=other
(有点像MSC ++那样),这将是一个很好的奖励。