Why can't the type of my class-static auto function be deduced within the class scope?

前端 未结 1 1960
没有蜡笔的小新
没有蜡笔的小新 2021-01-11 20:33

I\'m trying to get the return type of an auto function. This works:

auto foo(int bar)
{
    return 0;
}

typedef std::result_of

        
1条回答
  •  醉梦人生
    2021-01-11 21:29

    While the way you have written the code makes it appear possible, the in-class definition of foo() can only be processed after the class is fully defined. It is as if you wrote this:

    struct Foo
    {
        static auto foo(int bar);
    
        typedef std::result_of foo_t;
    };
    
    auto Foo::foo(int bar)
    {
        return 0;
    }
    

    The definition of foo() is allowed to use types defined in class Foo, including foo_t, which would be circular. Therefore, the definition of class Foo is not allowed to use the definition of its member functions--only their declarations.

    In other words, you assume the code is fully evaluated from the top to the bottom. It is not.

    0 讨论(0)
提交回复
热议问题