SORU
7 EYLÜL 2012, Cuma


Neden bu parçacık üniforma başlatma kullanarak g 4.6 ama g 4.7 ile derleme mi?

UnutmayıntüretilmişC 11 üniforma başlatma sözdizimi temel sınıf kurucusunu çağırmak için kullanır.

class base
{
    protected:
        base()
        {}
};

class derived : public base
{
    public:
        derived()
            : base{} // <-- Note the c  11 curly brace syntax
                     // using uniform initialization. Change the
                     // braces to () and it works.
        {}
};

int main()
{
    derived d1;

    return 0;
}

g 4.6 bu derler, ancak g 4.7:

$ g  -4.7 -std=c  11 -Wall -Wextra -pedantic curly.cpp -o curly
curly.cpp: In constructor ‘derived::derived()’:
curly.cpp:4:13: error: ‘base::base()’ is protected
curly.cpp:19:24: error: within this context

Neler oluyor?

Güncelleme 1: ayrıca çınlama -3.1 ile uyarı yapılmaksızın derler
Güncelleme 2: Looks like a compiler bug for sure. anlaşılan GCC 4.7.3 sabit.

CEVAP
17 EKİM 2012, ÇARŞAMBA


Paolo eğer carlini, GCC/libstdc bir katılımcı, confirmed it is a bug/regression.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • pissengehen

    pissengehen

    26 EYLÜL 2006
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008