Здравствуйте, Аноним, Вы писали: А>Подскажите, что надо поправить?
void f()
{
// MINGW: expected primary-expression before "int" В чем тут проблема?
// VC 7.1 компилит
// this->>uuu<int>('a');
// Должно быть:
this->template uuu<int>('a');
};
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, ruslan_abdikeev, Вы писали:
_>>
_>>// this->>uuu<int>('a');
_>>// Должно быть:
this->>>template uuu<int>('a');
_>>
_>>MINGW прав. _>>VC7.1 — нет.
E>А разве template в этом месте обязателен?
this зависит от параметра шаблона => в выражениях this->, *this. для обращения к шаблонному члену нужно писать template. (см. 14.2 4)
The last good thing written in C was Franz Schubert's Symphony No. 9.
VС 7.1 vs MINGW, кто прав?
От:
Аноним
Дата:
25.10.05 05:02
Оценка:
Подскажите, что надо поправить?
template <class self_t_t>
struct mix_in_t
{
template <class TT, class V>
void uuu(V const&)
{
}
};
template < class T, template <class> class mix_in_t_t>
struct foo
: mix_in_t_t< foo<T, mix_in_t_t> >
{
void f()
{
// MINGW: expected primary-expression before "int" В чем тут проблема?
// VC 7.1 компилит
this->uuu<int>('a');
};
};
int main (int argc, char *argv[])
{
foo<int, mix_in_t> foo_instance;
foo_instance.f();
return 0;
}
_>// this->>uuu<int>('a');
_>// Должно быть:
this->>template uuu<int>('a');
_>
_>MINGW прав. _>VC7.1 — нет.
А разве template в этом месте обязателен?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>А разве template в этом месте обязателен?
Да, так как не известно — что uuu это шаблон во всех специализациях mix_in_t. Например, дальше может идти код:
template < class T, template <class> class mix_in_t_t >
struct mix_in_t< foo<T, mix_in_t_t> >
{
static const int uuu = 3;
};
Тогда < это знак меньше (в this->uuu < int > ('a')).
Здравствуйте, Erop, Вы писали: >> this->>>template uuu<int>('a'); E>А разве template в этом месте обязателен?
Конечно.
Компилятор же не знает — что это такое в конкретной специализации mix_in.
Будет шаблонная функций — значит '<' — это параметры.
Будет константа — значит '<' — это меньше.
И т.п.
Здравствуйте, ruslan_abdikeev, Вы писали:
_>Здравствуйте, Erop, Вы писали: >>> this->>>template uuu<int>('a'); E>>А разве template в этом месте обязателен?
_>Конечно. _>Компилятор же не знает — что это такое в конкретной специализации mix_in. _>Будет шаблонная функций — значит '<' — это параметры. _>Будет константа — значит '<' — это меньше. _>И т.п.
Ну казалось бы, подставят параметр и узнает
Стандарт же не обязывает компилировать всё в шаблонах заранее?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, ruslan_abdikeev, Вы писали:
_>>Здравствуйте, Erop, Вы писали: >>>> this->>>template uuu<int>('a'); E>>>А разве template в этом месте обязателен?
_>>Конечно. _>>Компилятор же не знает — что это такое в конкретной специализации mix_in. _>>Будет шаблонная функций — значит '<' — это параметры. _>>Будет константа — значит '<' — это меньше. _>>И т.п.
E>Ну казалось бы, подставят параметр и узнает E>Стандарт же не обязывает компилировать всё в шаблонах заранее?
Но писать template в таких случаях заставляет.
The last good thing written in C was Franz Schubert's Symphony No. 9.