Pytanie Możliwy błąd kompilatora w MSVC12 (VS2013) z wyznaczonym inicjatorem


Używając VS2013 Update 2, natknąłem się na dziwny komunikat o błędzie:

// 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;
}

Zarówno GCC, jak i Clang to akceptują.

Czy brakuje mi czegoś lub czy ten fragment kodu ujawnia błąd kompilatora?

EDYTOWAĆ : Duplikować: Inicjowanie struktury w innej strukturze przy użyciu wyznaczonego inicjalizatora powoduje błąd kompilacji w programie Visual Studio 2013


11
2018-06-06 21:16


pochodzenie


Czy ten przykład jest minimalny (tj. Czy problem zostanie usunięty, jeśli usuniesz część z nich? structs)? - Patrick Collins
Jeśli nie widzisz go w linku: Poprawka dla tego problemu została sprawdzona w źródłach kompilatora. Poprawka powinna pojawić się w przyszłej wersji programu Visual C ++. Być może działa to z nowym CTP? - chris
@PatrickCollins To jest uproszczony przykład, błąd po raz pierwszy pokazany D2D1_SIZE_U i D2D1_HWND_RENDER_TARGET_PROPERTIES z <d2d1.h> - diapir
@chris Właśnie zobaczyłem. Link wydawał się martwy po mojej stronie internetu. Dzięki. - diapir


Odpowiedzi:


To jest znany błąd. Mówi się, że zostanie naprawiony w kolejnej wersji MSVC.

EDYTOWAĆ: Niestety błąd nadal występuje w VS14 CTP 4.

EDYTOWAĆ: Ten błąd został naprawiony w VS2015 CTP 5.


9
2018-06-06 21:35