Рассмотрим следующие прототипы функций:
void Remove(SomeContainer& Vec, const std::size_t Index);
SomeContainer Remove(SomeContainer Vec, const std::size_t Index);
Второй реализуется на основе первого. Другими словами, они функционально идентичны во всех отношениях, за исключением того, что один передается по ссылке, а другой — по значению.
Однако GCC говорит, что в подобных случаях это неоднозначно, хотя первая форма — единственная, которая не возвращает значение:
Remove(SomeContainer, 123);
Есть ли обходной путь для этого, или мне нужно придумать разные имена для каждой формы?