我有这个MCVE:
auto bar() -> double { return 8.0; }
int main()
{
if ( auto foo = bar() )
{
return foo;
}
else if ( auto foo = bar() )
{
return foo;
}
}
使用编译它
gcc 7.3
还有这些选项
-c -Werror -Wextra -Wall -Wshadow
生成以下错误消息:
test-shadow.cpp: In function âint main()â:
test-shadow.cpp:9:17: error: declaration of âfooâ shadows a previous local [-Werror=shadow]
else if ( auto foo = bar() )
^~~
test-shadow.cpp:5:12: note: shadowed declaration is here
if ( auto foo = bar() )
我不明白为什么第二个
foo
是
阴影
第一个定义。
我的问题:
为什么是
gcc
是否生成此错误?在我看来
foo公司
定义仅在
if
块,因此第二个定义不是
阴影
第一个。