Обратите внимание, что ваш код будет компилироваться только с компилятором C ++ 11.
При передаче целочисленного литерала, который по умолчанию имеет тип int
, если только вы не пишете 1L
, создается временный объект типа int
, связанный с параметром функция. Это как first из следующих инициализаций:
int && x = 1; //ok. valid in C++11 only.
int & y = 1; //error, both in C++03, and C++11
const int & z = 1; //ok, both in C++03, and C++11