Недавно я нашел интересный фрагмент кода в статье Познакомьтесь с новым Формы инициализации C ++ 11 Дэнни Калев:
class C
{
string s("abc");
double d=0;
char * p {nullptr};
int y[5] {1,2,3,4};
public:
C();
};
Строка string s("abc");
мне кажется подозрительной. Я думал, что использование конструктора недопустимо, пока член инициализируется в классе. И этот код (упрощенный до class C { string s("abc");
}; `) не компилируется с
- clang 3.6.1 (аргументы компилятора:
-std=c++11 -Wall -Wextra -Werror -pedantic-errors
) - g ++ 5.1.0 (аргументы компилятора те же:
-std=c++11 -Wall -Wextra -Werror -pedantic-errors
) - vc ++ 18.00.21005.1 (аргументы компилятора:
/EHsc /Wall /wd4514 /wd4710 /wd4820 /WX /Za
) - vc ++ 19.00.22929.0 (аргументы компилятора предопределены службой:
/EHsc /nologo /W4 /c
)
Я прав и в этой статье есть ошибка?