我也不知道这个能不能算是2005的bug吧,反正我是想不太明白。
今天在对我的pool使用policy的设计的时候发现的。
//前面代码省略
struct single_thread
{
template<class T> struct thread_safe_type
{
typedef boost::add_volatile<T> result;
}
};
template<class ThreadingModel>
struct pool : private ThreadingModel
{
typedef typename ThreadingModel::thread_safe_type<size_t>::result index_t;//其实有没有typename都一样。
//other public members
private:
index_t first_free_;
};
看起来这段代码是完全能正常工作的,是吧。可是很不幸的是这代码在2005上没法正常通过。
解决的方法很简单:
typedef ThreadingModel TM;
typedef TM::thread_safe_type<size_t>::result index_t;
就可以大功告成了。不知道是不是typename的问题。但是从编译器的出错提示来看并不能和简单的typename的问题混为一谈。另外,如果这个thread_safe_type不是模板而只是一个普通的struct或者typedef的话,也是没有这个问题的。
如果有知道这个问题出现的根本原因的,请指教。