Kompilator clang emituje ostrzeżenia dotyczące poniższego fragmentu, co można zobaczyć pod here.Dlaczego klang emituje te ostrzeżenia?
clang++ -std=c++14 -O0 -Wall -pedantic -pthread main.cpp && ./a.out
main.cpp:1:18: warning: braces around scalar initializer [-Wbraced-scalar-init]
void point(int = {1}, int = {2}) {}
^~~
main.cpp:1:29: warning: braces around scalar initializer [-Wbraced-scalar-init]
void point(int = {1}, int = {2}) {}
^~~
2 warnings generated.
Dlaczego tak jest?
void point(int = {1}, int = {2}) {}
int main(){
point();
}
O ile mogę powiedzieć, {1}
i {2}
są doskonale ważne argumenty domyślne według [dcl.fct.default]/1, [dcl.fct]/3 i [dcl.init]/1.
Cóż, to tylko ostrzeżenie, IMO to po prostu oznacza "hej, to bezużyteczne i wygląda dziwnie, czy jesteś pewien, że o to ci chodziło?". – Quentin
@Quentin Ponieważ wydaje się, że jest to całkowicie poprawny kod, nie powinno być żadnego ostrzeżenia. –
Istnieje wiele ważnych fragmentów, które wywołują ostrzeżenia - nieprawidłowy kod wyzwala błędy. 'if (x = something());' jest kolejnym. – Quentin