Сам по себе этот фрагмент кода не имеет определения bar
, vector
или odp
. Что касается того, почему вы не получаете сообщение об ошибке определения bar
, я могу только предположить, что вы вывели его из контекста.
Я предполагаю, что он должен определять foo
как функцию, что vector
называет шаблон и что он должен определять параметр с именем ftw
, но в объявлении все, что на самом деле не определяется, нуждается в быть объявленным ранее, чтобы компилятор знал, что означают все остальные идентификаторы.
Например, если вы определяете новые типы следующим образом, вы получаете фрагмент, который будет компилироваться:
struct bar {};
struct odp {};
template<class T> struct vector {};
bar foo(vector<odp> ftw);