Я понимаю, что использование templates
является одним из оцененных способов перегрузки, но мне было интересно, почему auto
нельзя использовать для вывода типа параметра функции, тем самым предотвращая перегрузку функции?
N3690
говорит в 7.6.1.4/3, что выражение лямбда можно сделать общим с использованием auto, предоставив этот пример
auto glambda = [](int i, auto a) { return i; };//OK: a generic lambda
(примечание: это не упоминается в N3485)
1). Почему бы мне не сделать аналогичную вещь для нормальной функции, например,
void swap(auto& param1, decltype(param1)& param2)
{
decltype(param1) temp = param1;
param1 = param2;
param2 = temp;
}
это дает ошибки error : parameters declared auto
.
от N3690 7.1.6.4/4
Тип переменной, объявленной с использованием auto или decltype (auto), выводится из инициализатор. Это использование разрешено при объявлении переменных в блоке (6.3), в области пространства имен (3.3.6) и в for-init-statement (6.5.3). [...]
Я ошибаюсь, полагая, что param1
и param2
попадают под область блока и, следовательно, имеют право на автоматический вывод?
2). если такая возможность была разрешена, то что было бы ошибкой?
Я использую gcc 4.8.1.
Спасибо