Use of 'auto func(int)' before deduction of 'auto' in C++14

后端 未结 4 420
攒了一身酷
攒了一身酷 2020-12-05 13:35

I have compiled following program in GCC using C++14.

#include 
using namespace std;

auto func(int i);

int main() 
{
    auto         


        
4条回答
  •  旧巷少年郎
    2020-12-05 14:16

    This is [dcl.spec.auto/11]:

    If the type of an entity with an undeduced placeholder type is needed to determine the type of an expression, the program is ill-formed. Once a non-discarded return statement has been seen in a function, however, the return type deduced from that statement can be used in the rest of the function, including in other return statements. [ Example:

    auto n = n;                     // error, n's type is unknown
    auto f();
    void g() { &f; }                // error, f's return type is unknown
    auto sum(int i) {
      if (i == 1)
        return i;                   // sum's return type is int
      else
        return sum(i-1)+i;          // OK, sum's return type has been deduced
    }
    

     — end example ]

    To translate this into English: the compiler needs to know the return type before you can use the function. In case of auto used like this, this is typically achieved by moving the definition before the point of use. If you don't actually need to use return type deduction, you can keep the definition after the use if you provide a signature, including the return type, in the declaration.

提交回复
热议问题