В чем причина невозможности определить размер массива из строки инициализатора в переменной-члене?

Рассмотрим код:

struct Foo
{
    const char str[] = "test";
};

int main()
{
    Foo foo;
}

Он не компилируется как с g ++, так и clang ++, выпуская по существу

error: array bound cannot be deduced from an in-class initializer

Я понимаю, что именно об этом, вероятно, говорит стандарт, но есть ли какая-то конкретная причина, почему? Поскольку у нас есть строковый литерал, кажется, что компилятор должен иметь возможность без проблем определять размер, аналогично случаю, когда вы просто объявляете вне классаconst C-подобная строка с нулевым символом в конце.

Ответы на вопрос(3)

Ваш ответ на вопрос