11

Использование VS2013 Update 2, я наткнулся на какой-то странное сообщение об ошибке:Возможная ошибка компилятора в MSVC12 (VS2013) с назначенным инициализаторе

// test.c 
int main(void) 
{ 
    struct foo { 
     int i; 
     float f; 
    }; 

    struct bar { 
     unsigned u; 
     struct foo foo; 
     double d; 
    }; 

    struct foo some_foo = { 
     .i = 1, 
     .f = 2.0 
    }; 

    struct bar some_bar = { 
     .u = 3, 

// error C2440 : 'initializing' : cannot convert from 'foo' to 'int' 
     .foo = some_foo, 

     .d = 4.0 
    }; 

// Works fine 
    some_bar.foo = some_foo; 

    return 0; 
} 

Оба GCC и Clang принять его.

Я что-то упустил или этот фрагмент кода обнаруживает ошибку компилятора?

EDIT: Дубликат: Initializing struct within another struct using designated initializer causes compile error in Visual Studio 2013

+0

Является ли этот пример минимален (т.е. делает проблему уйти, если вы удалите некоторых членов этих '' '' '' '' '' '' '' '' '' '' '' '' '' '' '') –

+2

Если вы не видите его в ссылке: * Исправление этой проблемы было проверено в источниках компилятора. Исправление должно появиться в будущей версии Visual C++. * Возможно, это работает с новым CTP? – chris

+0

@PatrickCollins Это упрощенный пример, ошибка, впервые показанная с 'D2D1_SIZE_U' и' D2D1_HWND_RENDER_TARGET_PROPERTIES' от diapir

ответ

9

Это known bug. Говорят, что он исправлен в следующей версии MSVC.

EDIT: К сожалению, ошибка все еще присутствует в VS14 CTP 4.

EDIT: Эта ошибка была исправлена ​​в VS2015 CTP 5.