Skopiuj inicjalizację nawiasów klamrowych konstruktora

„możemy inicjalizować obiekty klasy, dla której nie zdefiniowaliśmy żadnego konstruktora, używając:

inicjalizacja członkostwa.inicjalizacja kopiowania.domyślna inicjalizacja.

Na przykład:

    struct Work {
      string author;
      string name;
      int year;
    };

    Work s9 { "Bethoven",
              "Symphony No. 9 in D minor, Op. 125; Choral",
              1824
            };                    // memberwise initialization

    Work currently_playing {s9};  // copy initialization
    Work none {};                 // default initialization

The C ++ Programming Language 4th Ed. Rozdział 17.3.1

Na przykład:

   struct Data
     {
        int mMember1;
        float mMember2;
        char mMember3;
     };

     int main()
     {
         Data aData_1{1,0.3,33};
         Data aData_2{aData_1};

         return EXIT_SUCCESS;
     }

Musi to działać, chociaż otrzymuję błąd kompilatora w GCC tak samo jak w Clang. Błąd „Nie można konwertować danych na int” w obu kompilatorach. Jednak zaimplementowanie konstruktora kopiowania tego błędu znika lub nie wrzuca go, ale za pomocą składni nawiasów okrągłych. Problem jest trochę głupi i zmiana kręcenia dla okrągłych szelek rozwiązuje problem. Ale dlaczego zasady TC ++ PL nie są przestrzegane ?, czy jest to problem z kompilatorem, czy coś nie rozumiem ?. Z góry dziękuję.

questionAnswers(1)

yourAnswerToTheQuestion