2014-11-02 7 views
1

Я заметил сегодня, что один из моих файлов заголовков по-прежнему использовал шаблон auto_ptr<>.Почему некоторые устаревшие классы НЕ генерируют предупреждение при компиляции с g ++?

Я использую -std = C++ 11, чтобы убедиться в компиляции в C++ 11 и -pedantic и -Werror, чтобы обнаружить устаревшее использование. Поэтому я бы предположил, что у меня была ошибка при компиляции этого заголовка, поскольку auto_ptr отмечен как устаревший, как вы думаете?

Существует часть класса с наступательной определения:

class server 
{ 
[...snip...] 

private: 
    std::auto_ptr<snap_listen_thread>  f_listen_runner; 
    std::auto_ptr<snap_thread>   f_listen_thread; 

[...snip...] 
}; 

Далее перечислены все параметры командной строки. Я использую г ++ версии 4.8.2 (Ubuntu 4.8.2-19ubuntu1) и, как мы можем видеть, у меня есть -pedantic и -Werror в списке:

кд/дом/snapwebsites/BUILD/snapwebsites/Библиотека & &/usr/bin/C++ -DCONTROLLED_VARS_DEBUG -DDEBUG -DQT_CORE_LIB -DQT_DEBUG -DQT_XMLPATTERNS_LIB -DQT_XML_LIB -D_DEBUG -Dsnapwebsites_EXPORTS -std = C++ 11 -Werror -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wctor-dtor -privacy -Wdisabled-optimization -Winit-self -Wlogical-op -Wmissing-include-dirs -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 4 -Wundef -Wno -unused -Wunused-variable -Wno-variadic-macro -Wno-скобки -Wno-unknown-pragmas -Wwrite-strings -Wswitch -fdiagnostics-show-option -fPIC -Wunused-parameter -Wfloat-equal -Wold-sty le-cast -Wnoexcept -g -g -O0 -fPIC -I/home/snapwebsites/snapwebsites -I/home/snapwebsites/snapwebsites/lib -I/home/snapwebsites/BUILD/snapwebsites -I/home/snapwebsites/BUILD/snapwebsites/lib -I/home/snapwebsites/BUILD/dist/include -I/home/snapwebsites/BUILD/dist/include/advgetopt -I/home/snapwebsites/BUILD/dist/include/QtSerialization -система/usr/include/qt4 -система/usr/include/qt4/QtXmlPatterns -система/usr/include/qt4/QtXml -система/usr/include/qt4/QtCore -система/usr/include/qt4/QtDesigner -система/usr/include/qt4/QtDeclarative -isystem/usr/include/qt4/QtScriptTools -система/usr/include/qt4/QtDBus -система/usr/include/qt4/QtSql -система/usr/include/qt4/QtOpenGL -система/usr/include/qt4/QtNetwork -система/usr/include/qt4/QtWebKit -система/usr/include/qt4/QtHelp -система/usr/include/qt4/QtUiTools -система/usr/include/qt4/QtTest -система/usr/include/qt4/QtScript -система/usr/include/qt4/QtSvg -система/usr/include/qt4/Qt3Support -система/usr/include/qt4/QtGui -isyst эм/USR/доли/qt4/mkspecs/по умолчанию -isystem/USR/включать/Proc -o CMakeFiles/snapwebsites.dir/snap_initialize_website.cpp.o -c /home/snapwebsites/snapwebsites/lib/snap_initialize_website.cpp

Может ли быть ошибка в g ++, что она еще не будет обнаруживать такие устаревшие шаблоны раз в то время?

+1

Все ли они действительно необходимы для воспроизведения проблемы? –

+0

«-специалист» и «-Werror» влияют на поведение компилятора, а не на поведение библиотеки. –

+0

@LightnessRacesinOrbit, командная строка автоматически генерируется 'cmake'. Мы используем Qt и несколько других библиотек ... каждый .cpp не требует всей -системы и -I, нет причин, по которым мы хотели бы иметь конкретный список включений для каждого файла. –

ответ

0

Как упоминалось в одном из моих комментариев, с помощью некоторых других людей, я узнал, что параметр командной строки является виновником.

г ++ отмечает все с не предупреждают об этом флаг, и это при ссылках на что-нибудь из этих библиотек и все они включали в себя установлен флаг ... К сожалению, многие из библиотек (немного Qt и особенно log4cplus) делать не компилируется без предупреждений.