gpt4 book ai didi

c++ - 内联命名空间和扩展命名空间

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:34 28 4
gpt4 key购买 nike

我阅读了有关 namespace 定义的部分。 N3797 的第 7.3.1 条说:

The inline keyword may be used on an extension-namespace-definition only if it was previously used on the original-namespace-definition for that namespace.

考虑以下代码片段:

namespace M
{
int h;
}

inline namespace M
{
int j = 6;
}

无论使用 -std=c++11 还是不使用该选项,它都能成功编译。你能解释一下这种行为吗?是 g++ 错误吗?

最佳答案

您对标准的引用是明确的:这是不允许的。

使用 Clang++ 我得到了关于此的非常明确的错误消息:

Test0614-1.cpp:17:18: error: non-inline namespace cannot be reopened as inline
inline namespace M
^
Test0614-1.cpp:12:11: note: previous definition is here
namespace M
^

所以这绝对是 g++ 中的错误。顺便说一句,这里有报道:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53402

编译器接受标准先前版本的内联命名空间并且至少没有警告的事实似乎是一个问题。这已在 2010 年被报告为错误,应该已修复:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43824

关于c++ - 内联命名空间和扩展命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219690/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com