C++ 为什么GCC可以编译std::exception(“某些错误消息”)而没有错误?

C++ 为什么GCC可以编译std::exception(“某些错误消息”)而没有错误?,c++,C++,我发现下面的代码抛出了一个异常,其中包含一条参数消息,但是GCC可以成功编译它而没有任何错误 当我使用clang编译时,结果是失败的。我想调试GCC编译过程,以找到与GCC选项-Q的区别,但它似乎不起作用。我希望有人能给我一些建议,或者告诉我为什么GCC能成功编译它 T* lpItem = new T; if (NULL == lpItem) { throw std::exception("New CachePool Item Fail"); } GCC正在利用添加以下内容 std::

我发现下面的代码抛出了一个异常,其中包含一条参数消息,但是GCC可以成功编译它而没有任何错误

当我使用clang编译时,结果是失败的。我想调试GCC编译过程,以找到与GCC选项-Q的区别,但它似乎不起作用。我希望有人能给我一些建议,或者告诉我为什么GCC能成功编译它

T* lpItem = new T;
if (NULL == lpItem)
{
    throw std::exception("New CachePool Item Fail");
}

GCC正在利用添加以下内容

std::exception::exception(const char *);
叮当声不是

在C++标准库中描述的非虚成员函数,一个实现可以声明一组不同的成员函数签名,前提是对从该文档中描述的声明集合中选择过载的成员函数的任何调用都表现为好像选择了过载。[ 注意:例如,一个实现可以添加具有默认值的参数,或者用两个或多个具有等效行为的成员函数替换具有默认参数的成员函数,或者为成员函数名添加额外的签名- 尾注 ]


Emphasis added

查看std::exception类的源代码。GCC有可能会丢弃该代码,因为new必须始终返回有效指针。或者,可能存在允许该构造函数的非标准扩展。如果要抛出包含消息的std::exception,请使用@Pady,即使它可以证明从来没有被调用过的是,必须是有效的C++,而忽略了像CistExPR这样的特殊情况,如果STD::Exchange新CaseCub项目失败可能是不兼容的,没有什么可以明确地说关于程序碎片。这就是为什么重要的。请确保您包括编译命令和任何错误消息。