c++ - 获取编译期间使用的最大模板实例化深度

标签 c++ c++11 g++4.8

正如标题所说,是否有任何编译器日志设置可以提供编译器在编译期间达到的最大实例深度?

如果编译超过max template deph(GCC在C++11模式下默认值为900),则编译失败。但我需要的是获得编译器在成功编译期间达到的最大模板实例化深度。

最佳答案

g++ 确实有这样的选项,但例如在 kubuntu 上默认情况下不启用它。

以下是 gcc-4.8.1gcc/cp/tree.c 的一部分(因此根据 GPL 获得许可):

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);
}

-fdump-statistics -fstats 添加到命令行时,您可以获得这些统计信息,但是 GATHER_STATISTICS 必须在编译 gcc 时,您可能必须重建 gcc 才能获得您正在寻找的功能。

关于c++ - 获取编译期间使用的最大模板实例化深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812169/

相关文章:

c++ - SFINAE: "enable_if cannot be used to disable this declaration"

c++ - 是否可以检查两个类是否具有相同的成员

c++ - 在 lambda 函数 g++-4.8 中调用继承的 protected 子类型

c++ - Try/Catch block 替换了析构函数中的方法 block

c++11 - unique_ptr 向量的取消引用包装器?

c++ - 他们如何在没有显式模型(又名概念图)的情况下避免基于概念的重载问题

c++ - 如何在 C++ 代码中使用 CityHash128?

c++ - 范围枚举的详细类型说明符不得使用 ‘class’ 关键字

c++ - ZZ坐标不匹配

c++ - sin_addr.S_un如何转换为char *?