Mam następujący kod:GCC odmawia listy inicjalizacji parametru
#include <initializer_list>
#include <utility>
enum class Classification
{
Unspecified,
Primary,
Secondary
};
class ClassificationMap
{
public:
ClassificationMap(std::initializer_list<std::pair<const Classification, int>> content = {});
};
void foo(ClassificationMap) {}
int main()
{
foo({{Classification::Unspecified, 42}});
}
Visual Studio 2013 & 2017 i brzękiem 3.4.1 (i powyżej) zarówno skompilować kod dobrze. Z mojego POV też powinno być dobrze. Jednak GCC 5.1 odmawia go skompilować, z powodu następującego błędu:
<source>: In function 'int main()':
<source>:22:44: error: could not convert '{{Unspecified, 42}}' from '<brace-enclosed initializer list>' to 'ClassificationMap'
foo({{Classification::Unspecified, 42}});
(ja przechodząc poprawnego standardowego flagę (-std=c++11
) zarówno GCC i Clang).
Czy jest jakiś problem w moim kodzie, czy jest to rzeczywiście błąd GCC?
informacji miejski: w moim prawdziwym kodzie lista initialiser służy do zainicjowania nieuporządkowaną członek mapę klasy ClassificationMap
(dlatego jej typ, co to jest). Potrzebuję kodu do pracy w VS2013 & GCC 5.1
Dodanie kolejnego zestawu '' {} wokół nich sprawia, że działa. Bardzo dziwne ... – InternetAussie
Usunięcie '= {}' w 'ClassificationMap (std :: initializer_list> content = {})' powoduje, że kompiluje się w g ++ –
NathanOliver
@NathanOliver Dzięki, to świetna wskazówka. Użyję tego jako obejścia w moim kodzie. Wciąż byłbym zainteresowany tym, kto jest w błędzie, ja lub GCC. – Angew