当前位置:  开发笔记 > 编程语言 > 正文

为什么我的类静态自动函数的类型不能在类范围内推导出来?

如何解决《为什么我的类静态自动函数的类型不能在类范围内推导出来?》经验,为你挑选了1个好方法。

我正在尝试获取auto函数的返回类型.这有效:

auto foo(int bar)
{
    return 0;
}

typedef std::result_of foo_t;

好的,这是下一步:static auto在类范围中获取函数的返回类型.这也有效:

struct Foo
{
    static auto foo(int bar)
    {
        return 0;
    }
};

typedef std::result_of foo_t;

但这不起作用:

struct Foo
{
    static auto foo(int bar)
    {
        return 0;
    }

    typedef std::result_of foo_t;
};

GCC说"错误:在扣除'auto'之前使用'static auto Foo :: foo(int)'",Clang说"在推定返回类型之前,函数'foo'不能在定义之前使用".为什么?



1> John Zwinck..:

虽然编写代码的方式使得它看起来成为可能,但foo()只能在完全定义类之后才能处理类内定义.就像你写的那样:

struct Foo
{
    static auto foo(int bar);

    typedef std::result_of foo_t;
};

auto Foo::foo(int bar)
{
    return 0;
}

的定义foo()被允许使用在定义的类型class Foo,包括foo_t,这将是圆形的.因此,定义class Foo不允许使用其成员函数的定义 - 只有它们的声明.

换句话说,您假设代码是从上到下完全评估的.它不是.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有