/*
* Copyright ©2026 Soham Pardeshi. All rights reserved.
* Permission is hereby granted to students registered for University of
* Washington CSE 333 for use solely during Summer Quarter 2026 for
* purposes of the course. No other use, copying, distribution, or
* modification is permitted without prior written consent. Copyrights
* for third-party components of this work must be honored. Instructors
* interested in reusing these course materials should contact the author.
*/
#include <iostream> // for std::cout, std::endl
#include <cstdlib> // for EXIT_SUCCESS
using std::cout;
using std::endl;
// auto asks the compiler to deduce the type. By default it deduces the
// VALUE type: it copies, and strips top-level const and references. Add
// const and & back yourself when you want a cheap, read-only view.
int main(int argc, char** argv) {
int x = 5;
const int y = 6;
auto a = y; // a is int (const dropped, and it is a copy)
a += 1; // OK: a is a plain, modifiable int
const auto b = y; // b is const int
// b += 1; // ERROR: b is const
const auto& c = x; // c is a const int&: no copy, read-only view of x
// c += 1; // ERROR: c is a const reference
cout << "a = " << a << ", b = " << b << ", c = " << c << endl; // 7, 6, 5
return EXIT_SUCCESS;
}
// Compile with:
// g++ -Wall -g -std=c++17 -o auto auto.cc