我试图获取auto
函数的返回类型。 This works:
auto foo(int bar)
{
return 0;
}
typedef std::result_of<decltype(foo)> foo_t;
很好,下一步是:在类范围内获取static auto
函数的返回类型。 This also works:
struct Foo
{
static auto foo(int bar)
{
return 0;
}
};
typedef std::result_of<decltype(Foo::foo)> foo_t;
struct Foo
{
static auto foo(int bar)
{
return 0;
}
typedef std::result_of<decltype(Foo::foo)> foo_t;
};
GCC说&#34;错误:使用&#39;静态自动Foo :: foo(int)&#39;在扣除&#39; auto&#39;&#34;之前,Clang说&#34;功能&#39; foo&#39;具有推导的返回类型在定义之前不能使用&#34;。为什么呢?
答案 0 :(得分:14)
虽然编写代码的方式使得它看起来成为可能,但foo()
的类内定义只能在完全定义类之后才能处理。就像你写的那样:
struct Foo
{
static auto foo(int bar);
typedef std::result_of<decltype(Foo::foo)> foo_t;
};
auto Foo::foo(int bar)
{
return 0;
}
foo()
的定义允许使用class Foo
中定义的类型,包括foo_t
,这将是循环的。因此,class Foo
的定义不允许使用其成员函数的定义 - 只能使用它们的声明。
换句话说,您假设代码是从上到下完全评估的。事实并非如此。