I'm confused by the following piece of code:
#include <iostream>
using namespace std;
int *foo()
{
//Operation
}
int main ()
{
auto int ret = foo();
}
I compiled the above code under GCC, but I got the following error:
error: two or more data types in declaration of 'ret'
auto int ret = foo();
But, if I remove int
type, like so:
auto ret = foo();
then it runs successfully.
auto
is a storage class and int
is a data type, then why do I get the error "two or more data types" in the first case?
auto
is not a storage class. It used to be, before C++11. But it was completely useless, so the keyword was re-purposed to allow automatic type inference. So when you say:
auto int ret = foo();
You are basically declaring the object to have 2 types (or possibly the same type twice), and that is an error. And when you say:
auto ret = foo();
The type of ret
is determined by whatever the function foo
returns, which is int*
in this case.