[[maybe_unused]] 在 if 语句中似乎在 GCC 中不起作用
[[maybe_unused]] in if statement doesn't seem to work in 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 上尝试这个,Clang 似乎没有警告 ui
未使用,无论 [[maybe_unused]]
是否存在)。
(此外:MSVC 也不会警告 ui
未使用,即使 [[maybe_unused]]
不存在也是如此。
对我来说似乎是一个编译器错误。该属性可以应用于任何变量声明,这就是变量声明。
归档91304.
[[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]]
是否存在)。
(此外:MSVC 也不会警告 ui
未使用,即使 [[maybe_unused]]
不存在也是如此。
对我来说似乎是一个编译器错误。该属性可以应用于任何变量声明,这就是变量声明。
归档91304.