0

I think that the usage of the keyword auto has become more efficient in the recent versions of C++. In older auto without data type specifier will default to int so writing:

auto value = 5.7; // implicit conversion to int
std::cout << value; // 5

auto val2 = "Hello there!"; // error: cannot convert from char* to int

In new MSVC++ 14.0 I can:

auto val = "Hello"; // val is of type char*
std::cout << val; // Hello

auto dVal = 567.235; // dVal is of type double. Ok

Above is so good this eliminates the burden get a generic type.

But consider this example:

#include <iostream>
using namespace std;

void print(auto param) { // error here:   A parameter cannot have type that contains 'auto' 
    cout << param << endl;
}

int main() {

    print("Hello!"); // string
    print(57); // int
    print(3.14); // double

    std::cout << std::endl;
    std::cin.get();
    return 0;
}

What I wanted above as long as the compiler chooses the right type for my variable according to the input value. I wanted to overcome function overloading make a function print takes an auto variable then when I call it the compiler will pass the relevant data type of the parameter.

But The problem I get compile-time error:

A parameter cannot have type that have 'auto'.

The thing is: This program works fine on gcc and Ideone compiler: https://ideone.com/i3DKzl

WonFeiHong
  • 445
  • 4
  • 16
  • 1
    Check out the template section in [one of these good books](https://stackoverflow.com/a/388282/2069064). – Barry Dec 14 '17 at 18:13

1 Answers1

0

Functions are not allowed to have auto parameters. You want a template instead.

template <class T>
void print(T&& param) {
    cout << param << endl;
}
0x5453
  • 12,753
  • 1
  • 32
  • 61