Ответ 1
Причина, по которой работает T()
, заключается в том, что компилятор интерпретирует ее как объявление функции, которое не принимает аргументов. Компиляция будет выполняться только с явным литьем:
static const int b = (const int) T{};
Этот очень простой код дает ошибку в 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.
Причина, по которой работает T()
, заключается в том, что компилятор интерпретирует ее как объявление функции, которое не принимает аргументов. Компиляция будет выполняться только с явным литьем:
static const int b = (const int) T{};