#include <array>
int main(int, char **argv)
{
std::array<int, 3> a = {1,2,3};
}
To kompiluje grzywny (-std = C++ 11), ale jeśli to -Wall daje to ostrzeżenie, że nie rozumiem:
clang_pp_error.cpp:5:28: warning: suggest braces around initialization of subobject [-Wmissing-braces]
std::array<int, 3> a = {1,2,3};
^~~~~
{ }
To ostrzeżenie nie powinny być tłumione. Jeśli kod jest zgodny z C++ 11, zalecana jest lista inicjalizująca za pomocą '{{..}}' zamiast pojedynczego '{..}'. Jest w tym cel i dlatego ostrzeżenie nie powinno być stłumione zamiast ulepszania kodu, który może powodować problemy później. –
@SohailSi Może to być użyteczne, aby zapobiec pomyłkom między obiektami podrzędnymi, które mają zostać zainicjalizowane, a inicjowanym obiektem, ale jest to niepoprawne w przypadkach takich jak 'std :: array', gdzie klasa otaczająca ma zastąpić jedyne dane tablicy członek. Egzekwowanie tego ostrzeżenia w takich przypadkach powoduje wyciek szczegółów implementacji. Zanim będzie można go osobno stłumić za pomocą nieco przenośnych środków (np. Atrybutów), domyślnie nie jest domyślnie włączone. – FrankHB