我也不知道這個能不能算是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的話,也是沒有這個問題的。
如果有知道這個問題出現的根本原因的,請指教。