C ++:转发声明类型def

时间:2013-09-27 14:57:49

标签: c++ c++11 typedef forward-declaration

我们正在尝试使用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吗?

1 个答案:

答案 0 :(得分:4)

  

这基本上是非法的

是的,是的。

  

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

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

  

这是C ++ 11的一些新功能吗?

没有。您可以使用using执行各种有趣的操作来创建别名;但是你仍然不能将类型声明为类和typedef