我偶然发现了一个令人困惑的情况,我发现了一个明显的缩小转换,但我很失望编译器(gcc-4.7.2)尽管有-Wall -Wnarrowing -pedantic
标志但没有发出警告。请看以下程序:
struct A {
int m;
A( int m ) : m(m) {};
};
int main() {
unsigned long v = 0;
A a1(v); // narrowing, but no warning (should this not cause a warning?)
A a2{v}; // narrowing, warning raised (expected)
}
的初始化a1
似乎在没有编译器窥视的情况下飞速发展。为了确保我不会发疯,我尝试以a1
相同的方式进行初始化,但使用大括号而不是括号。正如预期的那样,编译器会在第二种情况下警告缩小。
需要明确的是:我不是在询问在初始化列表中缩小转换的合法性。我知道这是不合法的——花括号的初始化a2
只是一个健全的检查。 我的问题与初始化列表无关。这不是一个重复的问题。
编译器不应该警告我关于缩小的初始化a1
吗?