我们正在尝试使用http://cpp-netlib.org并且无法编译它,因为它的一个标题中包含:{/ p>
namespace network {
namespace utils {
struct thread_pool;
}
}
和另一个:
namespace network {
namespace utils {
typedef ::network::concurrency::thread_pool thread_pool;
}
}
根据我对C ++中Forward declaration of a typedef in C++和http://www.cplusplus.com/forum/beginner/75561的理解,这基本上是非法的 - 你无法转发声明:“struct A;”然后尝试“typedef X A;”。
所以,我的问题是,他们究竟在编译这个允许它的是什么?这是C ++ 11的一些新功能,因为它们声称使用最新的C ++ 11吗?
答案 0 :(得分:4)
这基本上是非法的
是的,是的。
所以,我的问题是,他们究竟在用它编译它是什么允许它?
也许,他们从不在同一个翻译单元中包含两个标题。在这种情况下,大多数编译器将无法诊断错误(不需要诊断);而且你有可能最终得到一份工作计划。不过,你肯定处于未定义行为的世界。
这是C ++ 11的一些新功能吗?
没有。您可以使用using
执行各种有趣的操作来创建别名;但是你仍然不能将类型声明为类和typedef
。