我可以让gcc在编译过程中发出对象的类型吗

Can I make gcc emit the type of a object during compilation?

本文关键字:对象 类型 过程中 gcc 编译 我可以      更新时间:2023-10-16

我有类似的C++代码

auto x = foo(bar);
x.something();

由于模板和重载的参数,x的类型很难确定,并且在x.something()编译失败,出现了一个错误,我很难解释,因为我不知道x最终具有什么类型。(如果前面的代码是正确的,我知道它应该是什么,但可能不是这样。)

我能让gcc告诉我x实际上是什么类型吗?

您可以通过尝试访问不存在的类型来滥用编译器:

struct Foo{};
Foo foo(){ return Foo();}
int main()
{
    auto x = foo();
    using X = decltype(x)::ERROR;
}

然后检查编译器错误:

main.cpp:8:28: error: no type named 'ERROR' in 'Foo'

这个告诉你类型Foo

实例