簡體   English   中英

clang:折疊表達式和“未使用表達式結果”警告

[英]clang: Fold expression and “expression result unused” warning

在clang 7.0上,此代碼:

template <typename ... Ts> struct S {
  unsigned gs(unsigned i) {
    unsigned r = 0;
    ((r = unsigned(sizeof(Ts)), i-- == 0) || ...);
    return r;
  }
};

int foo(unsigned i) {
  S<int, double, long, float, char> s;
  return s.gs(3);
}

導致此警告:

~/dev/ta $ ~/bin/clang++ -c -std=c++17 fold-warning.cpp 
fold-warning.cpp:5:46: warning: expression result unused [-Wunused-value]
    ((r = unsigned(sizeof(Ts)), i-- == 0) || ...);
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    ^

為什么? 編譯器的邏輯未使用什么表達式?

Gcc 7.3 / 8.2對此感到滿意。

該行的結果:

((r = unsigned(sizeof(Ts)), i-- == 0) || ...);

是順序的|| 操作,其結果未使用,從而引起警告。

鑄造到void消除警告:

(void)((r = unsigned(sizeof(Ts)), i-- == 0) || ...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM