Вопрос про name-specifier
От: wander  
Дата: 28.03.11 16:04
Оценка:
Доброго вам вечерочка!

Напоролись с вот с коллегой на один забавный кусочек кода, выглядел он примерно так:
class A
{
public:
    void foo();
};

void A::A::foo()
{
}

И ничего. Даже варнинга нет. Компилятор у нас GCC, пробовали на разных версиях. Присмотревшись, лично мне показалось поведение не таким уж и нелогичным. Но вот что, интересно, по этому поводу есть в стандарте. Я сегодня вечером в нем копался, но явного разрешения такому не нашел, впрочем и запрещения тоже. Попробовал на comeau — тоже молчит. Компилирует тобишь, без предупреждений.

Буду премного благодарен, если кто обладающий точной информацией подскажет в чем тут суть.
Re: Вопрос про name-specifier
От: Ytz https://github.com/mtrempoltsev
Дата: 28.03.11 16:17
Оценка:
Похоже на глюк, прокатывает и такое:

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

Re: Вопрос про name-specifier
От: k.o. Россия  
Дата: 29.03.11 07:33
Оценка: 13 (3)
Здравствуйте, 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.

Re[2]: Вопрос про name-specifier
От: wander  
Дата: 29.03.11 07:51
Оценка:
Здравствуйте, 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.


Да. Спасибо, было в самом начале, а я пропустил.
Re[2]: Вопрос про name-specifier
От: adevelgio Россия  
Дата: 05.04.11 16:32
Оценка:
KO>

KO>The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name.


+3
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.