Рассмотрим следующий код:
#include <iostream>
class A
{
char name[40] = { "Blank" }; // note the braces here
public:
const char *getName() { return name; }
};
int main()
{
A a;
std::cout << a.getName() << std::endl;
}
Он дает ошибку в gcc (последняя версия 5.2.0):
prog.cpp:5:28: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
char name[40] = { "Blank" };
^
Но это не относится к clang, который скомбинирует его с -std=c++11 -pedantic -Wall.
Действительно ли неверно помещать скобки для нестатического инициализатора здесь?
AFAIR не имеет значения, присутствуют ли фигурные скобки или нет. Например, определение массива, например:
char text[] = "some text";
эквивалентно:
char text[] = { "some text" };