wiki:cpp-type-deduction
Table of Contents
C++ Type deduction
Type deduction is the process where the compiler infers template argument types from function arguments or variable initializers. Different deduction rules apply to different contexts: plain parameters deduce without references, reference parameters preserve reference-ness, and auto deduction differs slightly from function template deduction.
Understand type deduction to predict how templates behave and avoid surprises with reference stripping and decay.
Example
This example demonstrates type deduction rules for function templates and auto variables.
// compile: g++ -std=c++17 -o deduction deduction.cpp // run: ./deduction // description: type deduction rules for templates and auto #include <iostream> #include <type_info> template <typename T> void plain(T arg) { std::cout << "plain: " << typeid(T).name() << "\n"; } template <typename T> void ref(T& arg) { std::cout << "ref: " << typeid(T).name() << "\n"; } int main() { int x = 42; const int cx = 42; plain(x); // T = int plain(cx); // T = int (const stripped) ref(x); // T = int ref(cx); // T = const int (preserves const) auto a = x; // auto = int auto b = cx; // auto = int (const stripped) return 0; }
wiki/cpp-type-deduction.md · Last modified: (external edit)
