Доброго вам вечерочка!
Напоролись с вот с коллегой на один забавный кусочек кода, выглядел он примерно так:
class A
{
public:
void foo();
};
void A::A::foo()
{
}
И ничего. Даже варнинга нет. Компилятор у нас GCC, пробовали на разных версиях. Присмотревшись, лично мне показалось поведение не таким уж и нелогичным. Но вот что, интересно, по этому поводу есть в стандарте. Я сегодня вечером в нем копался, но явного разрешения такому не нашел, впрочем и запрещения тоже. Попробовал на comeau — тоже молчит. Компилирует тобишь, без предупреждений.
Буду премного благодарен, если кто обладающий точной информацией подскажет в чем тут суть.
Похоже на глюк, прокатывает и такое:
void A::A::A::A::A::A::A::A::A::foo()
{
}
А вот MS VS 2010 ругается:
c:\work\test\test\main.cpp(46): error C3083: '{ctor}': the symbol to the left of a '::' must be a type
c:\work\test\test\main.cpp(47): error C2533: 'A::foo' : constructors not allowed a return type
Здравствуйте, wander, Вы писали:
W>Буду премного благодарен, если кто обладающий точной информацией подскажет в чем тут суть.
W>
Похоже, это следствие из 9/2
The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name.
Здравствуйте, k.o., Вы писали:
KO>Похоже, это следствие из 9/2
KO>KO>The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name.
Да. Спасибо, было в самом начале, а я пропустил.