即使使用了變量,我仍然面臨的一個問題是編譯器會抱怨一個未使用的變量,但它只用於參數包擴展中,對於特定的實例而言,它只是空的。 例如:如何處理空模板參數包擴展引起的未使用的警告?
template <std::size_t... I>
auto func1(std::index_sequence<I...>)
{
auto var = get_tuple();
return func2(std::get<I>(var)...);
}
auto a = func1(std::make_index_sequence<0>());
參見live example(嘗試改變元組在第4行中,加入內<一個int>看到警告消失)。 我知道我可以添加一條(void)var;
行來使警告消失,但對我來說感覺很髒,特別是當函數實際上只是一行時。 我也不想全局禁用此警告,因爲它有時會提供洞察力。
這個問題的一個類似的表現是變量用於lambda捕獲。在這種情況下,海灣合作委員會吐出任何警告,而鐺抱怨(我想不用的拉姆達捕捉GCC從來沒有實現過警告):
template <std::size_t... I>
auto func1(std::index_sequence<I...>)
{
auto var = get_tuple();
auto my_lambda = [var](){
return func2(std::get<I>(var)...);
};
return my_lambda();
}
auto a = func1(std::make_index_sequence<0>());
使用鐺和文件到GCC的bug報告:P – Rakete1111
您仍然可以'編譯推/ pop'圍繞該功能禁用警告。但'static_cast(var);'似乎更好的解決方法。 –
Jarod42
'return func2(std :: get (get_tuple())...);'? – nwp