在gcc或clangdiagnostics中获取更详细的模板跟踪

在gcc或clangdiagnostics中获取更详细的模板跟踪,gcc,g++,clang++,Gcc,G++,Clang++,当展开模板时发生错误时,编译器将打印正在实例化的模板链。在较旧的gcc中,跟踪看起来像(编辑:实际上它似乎对函数模板执行此操作,但对类模板不执行此操作) 。。。当用[X=int,Y=double,Z=other]展开任何内容时 但是在g++4.8和clang++3.3中,它看起来像 required from whatever<int, double, other> 从任何位置都需要 虽然这是较短的,但当模板有10个参数时,它也是完全不可读的,其中大多数是模板,而这些模板的参数

当展开模板时发生错误时,编译器将打印正在实例化的模板链。在较旧的gcc中,跟踪看起来像(编辑:实际上它似乎对函数模板执行此操作,但对类模板不执行此操作)

。。。当用[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
。。。在扩展任何东西的同时
X=int
Y=双
Z=其他

(有点像MSC++),这将是一个不错的奖励。

请发布一个产生这样一个错误的代码。IMO、TMP跟踪和错误消息是当前编译器最糟糕的方面之一。也许这应该被认为是语言本身的缺陷。
... while expanding whatever<X, Y, Z> with
    X=int
    Y=double
    Z=other