Использование фигурных скобок для инициализации значения-инициализации в качестве инициализатора для статического члена данных вызывает ошибку

Этот очень простой код дает ошибку в GCC 6.0:

template<class T>
struct S {
    // error: cannot convert 'T' to 'const int' in initialization
    static const int b = T{};
};

int main() {
}

Странно, если вместо этого я использую регулярные фигурные скобки (T()), тогда код компилируется. Это ошибка? Код компилируется в clang.

Ответ 1

Причина, по которой работает T(), заключается в том, что компилятор интерпретирует ее как объявление функции, которое не принимает аргументов. Компиляция будет выполняться только с явным литьем:

static const int b = (const int) T{};