Рассмотрим следующий небольшой пример:
template<typename T> void foo(T a) { ... }
struct Bar { ... };
Bar x;
foo(x);
Мой вопрос: есть ли случаи, когда foo(x)
может интерпретироваться как foo(const Bar& x)
(x передается по ссылке) или всегда интерпретируется как foo(Bar x)
(x передается по значению, то есть явной копии x)?
В моем конкретном приложении мой код основывается на том факте, что создается копия (x используется в другом потоке, а исходный x выходит за рамки). Но я не уверен, что смогу предположить это. Я использую GCC 4.6.1.