Следующий код хорошо компилируется в gcc и clang, но выдает ошибку C4700 «неинициализированная локальная переменная« используется »в Visual Studio 2015 и более ранних версиях:
template<int T>
class V
{
public:
int v[T];
V() = default;
template<typename ...A>
V(A... args):
v{args...}
{}
};
int main()
{
V<2> a(2, 2);
V<2> b = a;
return 0;
}
Если добавить тело в конструктор(удалив = default
и добавив {}
) ошибка исчезнет.Я не могу найти ничего, что предписывает такое поведение в спецификации.Это ошибка в компиляторе Visual C ++ или я что-то упускаю в спецификации?