C++ 获取编译期间使用的最大模板实例深度
正如标题所述,是否有任何编译器日志记录设置可以提供编译器在编译期间达到的最大实例化深度?C++ 获取编译期间使用的最大模板实例深度,c++,c++11,g++4.8,C++,C++11,G++4.8,正如标题所述,是否有任何编译器日志记录设置可以提供编译器在编译期间达到的最大实例化深度? 如果编译超过最大模板深度(在C++11模式下,GCC的默认值为900),编译将失败。但我需要的是获得编译器在成功编译期间达到的最大模板实例化深度。g++确实有这样一个选项,但它在kubuntu上默认情况下不启用 以下内容是来自gcc-4.8.1的gcc/cp/tree.c的一部分(因此根据GPL获得许可): 在将-fdump statistics-fstats添加到命令行时,您可以获得这些统计信息,但是编译
如果编译超过最大模板深度(在C++11模式下,GCC的默认值为900),编译将失败。但我需要的是获得编译器在成功编译期间达到的最大模板实例化深度。
g++
确实有这样一个选项,但它在kubuntu上默认情况下不启用
以下内容是来自gcc-4.8.1
的gcc/cp/tree.c
的一部分(因此根据GPL获得许可):
在将
-fdump statistics-fstats
添加到命令行时,您可以获得这些统计信息,但是编译gcc
时必须启用GATHER\u statistics
,因此,您可能需要重新构建gcc
,以获得所需的功能。已经花了一天时间,没有更多的答案。我一直在等待一个成功的答案(在我当前的情况/编译器配置下有效的答案)。我昨天读了你的答案,我很喜欢。最后,这是唯一可能的答案。不幸的是,即使是在pt.c
中设置depth\u的行也只能通过GATHER\u STATISTICS
启用,因此可能没有其他方法。
void
cxx_print_statistics (void)
{
print_search_statistics ();
print_class_statistics ();
print_template_statistics ();
if (GATHER_STATISTICS)
fprintf (stderr, "maximum template instantiation depth reached: %d\n",
depth_reached);
}