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 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.