В Visual Studio 2013 следующий фрагмент кода вызывает ошибку компиляции.
ошибка C2440: «инициализация»: невозможно преобразовать из «TestSubStruct» в «int»
#include <stdio.h>
typedef struct TestSubStruct {
int test;
} TestSubStruct;
typedef struct TestStruct {
TestSubStruct sub;
} TestStruct;
int main(int argc, char* argv[])
{
TestSubStruct r = {0};
TestStruct vp = { .sub = r}; // this line causes the error
return 0;
}
Это можно легко переписать так, чтобы оно компилировалось, но я хочу знать, почему код не компилируется как есть. Нарушает ли это как-то спецификацию статических инициализаторов? Это просто проблема с MSVC или другие компиляторы тоже не могут это построить?
EDIT: Судя по комментаторам, это проблема MSVC. В этом случае мой вопрос: каковы точные ограничения поддержки MSVC 2013 для статических инициализаторов?
r
не инициализирован - person M.M   schedule 17.05.2014r
инициализируется, а ошибка все та же. - person John   schedule 17.05.2014{ .sub = r};
на{ .sub = (TestSubStruct)r}
, и все равно получил ошибку от VS2013:error C2440: 'type cast' : cannot convert from 'TestSubStruct' to 'TestSubStruct'
Classic Microsoft. - person Mahonri Moriancumer   schedule 17.05.2014