【发布时间】:2017-09-21 18:15:10
【问题描述】:
main.cpp:
#include "test.h"
void main () {narrowingConversion ();}
包括/test.h:
void narrowingConversion () {int i = 1; char a[1] = {i};}
当将include文件夹包含为系统文件夹时,Clang成功编译上述代码:
clang++ -std=c++0x -isystem./include main.cpp
但是正常包含文件夹时clang失败:
clang++ -std=c++0x -I./include main.cpp
./include/test.h:1:54: 错误:在初始化列表 [-Wc++11-narrowing] 中,非常量表达式不能从类型 'int' 缩小到 'char'
问题:为什么系统文件和非系统文件的 clang 行为不同?
【问题讨论】:
-
@jens 你确定这与
c无关吗? c警告/错误也可能出现此问题。 -
@m7913d 人们对于删除 C 或 C++ 标记的问题非常反身,因为他们不会立即看到两者的相关性。我知道这是基于错误标记的合法实例,但我认为人们过度纠正了。但是,在这种情况下,我可以看到他们的观点:虽然我很确定这对于 C 来说是相同的,但没有 Clang 的示例表现出相同的行为,所写的问题只是关于 C++。