LINUX.ORG.RU

Баг или фича? [C++]

 


0

0

template <typename T>
struct CL
{
    T * p;
    int i;
};

template <typename T>
struct DCL : public CL<T>
{
    void f()
    {
        i = 6;
        p = 0;
    }
};

int main ()
{
    DCL<void> d;
}

g++-3.4.6 глотает а g++-4.1.1 жуёт только если заменить:
 i => this->i
 p => this->p

(в т.ч.) Из-за такой фигни не собирается SqPlus.
Какое из поведений правильно по стандарту? :]
★★★

Ой что-то напутал. Ни 1 не собирает. Это правильно?

sf ★★★
() автор топика
Ответ на: комментарий от Legioner

Именно в этом и проблема, что ничто другое не собирает.

sf ★★★
() автор топика

namespace ns { void f1() { return f2(); } void f2() { return; } } int main() { ns::f1(); }

Поxоже, такую хрень тоже только VC++ берет :[.

sf ★★★
() автор топика
Ответ на: комментарий от sf

А её, ИМХО, и не должен никто брать. Должно быть так:

namespace ns {
     void f2();
     void f1() { return f2(); }
     void f2() { return; }
}

int main()
{
    ns::f1();
};

Или я не прав?...

Sectoid ★★★★★
()

Второе верно по стандарту. Также можно заменить
i = 6;
p = 0;
на
CL<T>::i = 6
CL<T>::p = 0

Reset ★★★★★
()

Всем большое спасибо. Что бы я без вас делал :].

sf ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.