5

我们正在尝试使用http://cpp-netlib.org并且无法编译它,因为在它的一个标头中它具有:

namespace network {
    namespace utils {
        struct thread_pool;
    }
}

在另一个:

namespace network {
        namespace utils {
            typedef ::network::concurrency::thread_pool thread_pool;
    }
}

根据我对C++ 中 typedef 的前向声明和 C++ 中的http://www.cplusplus.com/forum/beginner/75561理解,这基本上是非法的 - 你不能前向声明:“struct A;” 然后尝试“typedef XA;”。

所以,我的问题是,他们到底会用什么来编译它?这是 C++11 的一些新特性,因为他们声称使用最新的 C++11?

4

1 回答 1

4

这基本上是非法的

是的。

所以,我的问题是,他们到底会用什么来编译它?

也许,它们永远不会在同一个翻译单元中包含两个标题。在这种情况下,大多数编译器将无法诊断错误(不需要诊断);并且您仍有可能最终得到一个工作程序。不过,您肯定处于未定义行为的世界中。

这是 C++11 的一些新特性吗?

不,您可以做各种有趣的事情using来创建别名;但是您仍然不能将类型声明为 class 和typedef.

于 2013-09-27T15:06:00.643 回答