On Friday, 1 June 2012 at 08:08:19 UTC, Zhenya wrote:
Вот у нас есть такая конструкция
template foo(T)
{
foo(U)()
{
}
}
Могут ли у компилятора при
инстанциировании возникнуть
трудности с пониманием
какие аргументы к какому шаблону
относятся?
Вопрос у меня возник из-за того,что
когда я применил совет Philippe Sigaud
к своему полному коду компилятор
не
захотел его компилировать.Но когда
я поменял имя внутреннего шаблона
все стало хорошо.Это ведь
неправильно?
In other words:
Given this construct:
template foo(T)
{
foo(U)()
{
}
}
Could there be some problems with compiler not understanding
which template argument goes to which template here? The question
was born when I started applying Philippe Siguad's advice to my
full source code compiler rejected it.
But when I change inner tmeplate name it worked - it's no good,
is it?
Вопрос довольно сложный. Краткий
ответ - нет, все идет слева направо,
сверху вниз.
Есть впрочем одно но - компилятор
начинает выводить типы из
аргументов только для последнего foo
(т.е. U). То есть T в это случае дается
сверху (тобой через foo!T(...) ).
Впрочем в твоем примере foo не моежт
вывести U из аргументов (их нет).
Difficult Q. In short - no, it's all left-to-right up-to-bottom.
However compiler may deduce types only for lowest foo (i.e. U). T
in this case have to provided from above (by you as in
foo!T(...)).
---
It's me, just trying out web interface.