4
我玩弄可變參數模板,寫了這樣的基礎上,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 :: value <<'\ n';'print? –
Yakk