【发布时间】:2020-05-28 22:14:39
【问题描述】:
在这个问题中:
Print template typename at compile time
我们有一些关于如何让典型的 C++ 编译器在编译时打印类型名称的建议。但是,它们依赖于触发编译错误。
我的问题:我能否让 C++ 编译器在不停止编译的情况下打印类型的名称?
一般来说,答案是“可能不会”,因为一个有效的程序可以编译到它的目标对象中而不需要在任何地方打印任何东西,所以我特别询问 GCC 和 clang,可能使用预处理器指令、编译器内置函数,或任何特定于编译器的技巧。
注意事项:
- 显然,挑战在于在
using/typedef语句、模板参数值、可变参数模板等后面打印类型。如果类型明确可用,您可以使用#message "my type is unsigned long long"之类的东西(如@NutCracker 建议的那样)。但这不是问题的意义所在。 - 依赖于 C++11 或更早版本的答案优于要求 C++14/17/20 的答案。
【问题讨论】:
-
我更好奇你为什么需要这个?这应该解决什么问题?
-
@Someprogrammerdude:调试工具 TBH。我只想在遇到一些错误之前打印其中的一些,而不是提前中止编译。
-
@Someprogrammerdude:另一个动机是this one。
标签: c++ g++ clang++ compile-time debug-print