C++:转发声明类型def

Ded*_*eak 5 c++ typedef forward-declaration c++11

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

namespace network {
    namespace utils {
        struct thread_pool;
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个:

namespace network {
        namespace utils {
            typedef ::network::concurrency::thread_pool thread_pool;
    }
}
Run Code Online (Sandbox Code Playgroud)

从我了解,从C++中一个typedef的向前声明和http://www.cplusplus.com/forum/beginner/75561在C++中,这基本上违法-你就不能向前声明:"结构A;" 然后尝试"typedef XA;".

那么,我的问题是,他们究竟在编译什么呢?这是C++ 11的一些新功能,因为它们声称使用最新的C++ 11?

Mik*_*our 4

这基本上是非法的

是的。

所以,我的问题是,他们究竟会用什么来编译这个允许它?

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

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

不。您可以通过using创建别名来做各种有趣的事情;但你仍然不能将类型声明为类和typedef。