[[maybe_unused]]在if语句在GCC中似乎不起作用

时间:2019-07-31 00:29:39

标签: c++ gcc c++17 gcc-warning

[[maybe_unused]]中的全部要点是,它告诉编译器不要警告未使用的变量,对吗?那么,为什么GCC在这里警告ui未使用?

#include <iostream>
#include <vector>

#define NDEBUG
#include <cassert>

int main()
{   
  std::vector<int> numbers = {1,2,3};

  if ([[maybe_unused]] auto  ui = static_cast<unsigned int>(numbers.size()))
  {
    assert(ui);
    std::cout << "ok" << std::endl;
  }
}

我做错什么了吗?这是编译器中的错误吗?

(顺便说一句:在Wandbox上尝试此操作,Clang似乎没有警告ui未使用,无论是否存在[[maybe_unused]])。

(此外:即使没有ui,MSVC也不会警告[[maybe_unused]]未使用)。

1 个答案:

答案 0 :(得分:5)

对我来说,似乎是一个编译器错误。该属性可以应用于任何变量声明,这就是变量声明。

提起91304