Я играл с переменным числом шаблонов, и это написал, основываясь на this answer:Явный оператор << выбирает «неправильно» перегружать
template <size_t... I>
void print(seq<I...>)
{
decltype(std::cout) * dummy[sizeof...(I)] = { &(std::cout << I << ' ')... };
}
Поскольку std::cout::operator<<
имеет тип возвращаемого значения, она может быть сохранена, так что нет необходимости в (,0)
запятой.
Теперь, чтобы закрыть вверх «„пустышки“не используется переменная» предупреждение, и напечатать строку, я попытался следующие высказывания, но они не делают то, что я хотел:
dummy[0]->operator <<('\n'); // prints 10
(по-видимому, называется operator<<(int)
вместо operator<<(char)
dummy[0]->operator <<("\n"); // prints a pointer
(видимо, называется operator<<(const void*)
вместо operator<<(const char*)
в конец, мне пришлось написать
*dummy[0] << '\n'; // prints a newline as desired
Вопрос в том, почему выбрали «неправильные» перегрузки?
Что делает 'std :: cout << std :: is_same :: значение << '\ n';' print? –
Yakk