Почему следующее не удается скомпилировать?
inline Obj init_output_string() { return open_output_string(); }
template<typename... Args>
Obj init_output_string(Args... prev, int last)
{
Obj port(init_output_string(prev...));
write_char(port, last);
return port;
}
int ch1 = ...;
int ch2 = ...;
Obj port = init_output_string(ch1, ch2);
(ошибка 'init_output_string': no overloaded function takes 2 arguments
для MSVC, g ++ дает похожую ошибку).
Но следующий вариант компилируется
inline Obj init_output_string() { return open_output_string(); }
template<typename... Args>
Obj init_output_string(int first, Args... rest)
{
Obj port(init_output_string(rest...));
write_char(port, first);
return port;
}
int ch1 = ...;
int ch2 = ...;
Obj port = init_output_string(ch1, ch2);
Разница заключается в порядке написания символов.Я могу обойти это достаточно легко, но мне любопытно узнать, какое правило нарушает мой первый пример.