我有像这样的C ++代码
auto x = foo(bar);
x.something();
由于模板和重载的参数,x
的类型很难确定,编译在x.something()
失败,但是我很难解释因为我没有解释知道x
最终有什么类型。 (我知道它应该是什么,如果前面的代码是正确的,但情况可能并非如此。)
我可以让gcc告诉我x
实际上是什么类型的吗?
答案 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