The auto specifier is basically a placeholder for an actual type. When using auto, the compiler deduces the actual type from the following instances:
- From the type of the expression used to initialize a variable, when auto is used to declare variables.
- From the trailing return type or the type of the return expression of a function, when auto is used as a placeholder for the return type of a function.
In some cases, it is necessary to commit to a specific type. For instance, in the preceding example, the compiler deduces the type of s to be char const *. If the intention was to have a std::string, then the type must be specified explicitly. Similarly, the type of v was deduced as std::initializer_list<int>. However, the ...