объявление функции в функции: баг компилятора?
От: slava_phirsov Россия  
Дата: 15.10.13 11:41
Оценка:
Доброго времени суток всем читающим!

Вот такой вопросик: имеем минимальный пример

#include <iostream>

using std::cerr;

namespace
{

void foo()
{
    int bar();

    if (bar())
        cerr << "preved\n";
}

int bar()
{
    return -1;
}

}

int main(int argc, char* argv[])
{
    foo();

    return 0;
}


компилируется

g++ -ansi -Wall main.cpp


на "ура", но стоит добавить оптимизацию:

$g++ -O2 -ansi -Wall main.cpp
/tmp/ccZgQSZ3.o: In function `main':
main.cpp: (.text+0x3a): undefined reference to `(anonymous namespace)::bar()'


устраняется, если объявление bar() вынести за пределы функции foo().

Проверено на Centos 6, и на MinGW под Win. Беглый просмотр асм показал, что для функции bar() при включенной оптимизации просто не генерируется код. Это, лыжи не едут баг компилятора, или как?

Заранее благодарю
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.