首页 > 解决方案 > if 语句中的 [[maybe_unused]] 似乎在 GCC 中不起作用

问题描述

关键[[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 上尝试这个,ui无论是否[[maybe_unused]]存在,Clang 似乎都不会警告未使用)。

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

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

解决方案


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

提交91304


推荐阅读