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

Len*_*Len 3 c++ gcc gcc-warning c++17

重点[[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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

(顺便说一句:在Wandbox上尝试此操作,ui无论是否[[maybe_unused]]存在Clang,Clang似乎都不会发出警告)。

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

Bar*_*rry 5

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

提起91304