我可以在编译期间使gcc发出对象的类型吗?

时间:2016-07-23 13:30:06

标签: c++ gcc

我有像这样的C ++代码

auto x = foo(bar);

x.something();

由于模板和重载的参数,x的类型很难确定,编译在x.something()失败,但是我很难解释因为我没有解释知道x最终有什么类型。 (我知道它应该是什么,如果前面的代码是正确的,但情况可能并非如此。)

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

1 个答案:

答案 0 :(得分:1)

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

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

live example