linux - 为什么某些已弃用的类在使用 g++ 编译时不会生成警告?

标签 linux c++11 g++ compiler-warnings gcc-pedantic

我今天注意到我的一个头文件仍在使用 auto_ptr<>模板。

我正在使用 -std=c++11 来确保在 C++11 中编译,并使用 -pedantic 和 -Werror 来检测弃用的用法。所以我想我应该在编译该 header 时出错,因为 auto_ptr 被标记为已弃用,您怎么看?

类中有部分带有冒犯性的定义:

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

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

[...snip...]
};

下面列出了所有的命令行选项。我使用的是 g++ 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1),正如我们所见,列表中有 -pedantic 和 -Werror:

cd /home/snapwebsites/BUILD/snapwebsites/lib && /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-macros -Wno-parentheses -Wno-unknown-pragmas -Wwrite-strings -Wswitch -fdiagnostics-show-option -fPIC -Wunused-parameter -Wfloat-equal -Wold-style-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 -isystem /usr/include/qt4 -isystem /usr/include/qt4/QtXmlPatterns -isystem /usr/include/qt4/QtXml -isystem /usr/include/qt4/QtCore -isystem /usr/include/qt4/QtDesigner -isystem /usr/include/qt4/QtDeclarative -isystem /usr/include/qt4/QtScriptTools -isystem /usr/include/qt4/QtDBus -isystem /usr/include/qt4/QtSql -isystem /usr/include/qt4/QtOpenGL -isystem /usr/include/qt4/QtNetwork -isystem /usr/include/qt4/QtWebKit -isystem /usr/include/qt4/QtHelp -isystem /usr/include/qt4/QtUiTools -isystem /usr/include/qt4/QtTest -isystem /usr/include/qt4/QtScript -isystem /usr/include/qt4/QtSvg -isystem /usr/include/qt4/Qt3Support -isystem /usr/include/qt4/QtGui -isystem /usr/share/qt4/mkspecs/default -isystem /usr/include/proc -o CMakeFiles/snapwebsites.dir/snap_initialize_website.cpp.o -c /home/snapwebsites/snapwebsites/lib/snap_initialize_website.cpp

g++ 中是否存在错误,它偶尔会检测到此类已弃用的模板?

最佳答案

正如我的一条评论中提到的,在其他人的帮助下,我发现 -isystem 命令行选项是罪魁祸首。

g++ 用一个不警告这个标志标记所有东西,当引用这些库中的任何东西时,这个和它们包含的任何东西都设置了标志......不幸的是很多库(有点 Qt 和特别是 log4cplus) 不要在没有警告的情况下编译。

关于linux - 为什么某些已弃用的类在使用 g++ 编译时不会生成警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695014/

相关文章:

c++ - 对象 union 与指针 union

c++ - 如何使用 g++ 在 C++ 程序中链接节日 TTS 库

linux - GNU Parallel - 如何使用输入参数捕获具有名称的文件中的输出

mysql - 无法连接到 sphinx 数据库

C++ 类 vector 推回错误

c++ - 具有不同签名的函数数组

c++全局变量的初始化顺序

c# - 我可以 PInvoke C++ 可执行文件但不能共享库

php - 我将 php 作为 apache 的模块运行,但无法加载配置文件(php.ini)

linux - 如何开始在 *nix 上开发