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?
这基本上是非法的
是的。
所以,我的问题是,他们究竟会用什么来编译这个允许它?
也许,他们永远不会在同一个翻译单元中包含两个标头。在这种情况下,大多数编译器将无法诊断错误(不需要诊断);并且您最终仍有可能得到一个可以工作的程序。不过,你肯定处于行为未定义的世界中。
这是 C++11 的新特性吗?
不。您可以通过using创建别名来做各种有趣的事情;但你仍然不能将类型声明为类和typedef。
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |